0
点赞
收藏
分享

微信扫一扫

Java学习第二十六天<构造器><This>

徐一村 2022-03-15 阅读 53

构造器

package chapter06.D9构造器;
//构造器:在创建人类对象时候就直接指定这个对象的年龄和姓名
public class Constructor01 {
    public static void main(String[] args) {
        //当我们new一个对象时,直接通过构造器指定名字和年龄
        Person p1 = new Person("smith",80);
        System.out.println("p1的信息如下");
        System.out.println("p1对象name"+p1.name);
        System.out.println("p1对象age"+p1.age);
    }
}
class Person{
    String name;
    int age;
    /*
    1 构造器没有返回值,也不写void
    2 构造器名字和类Person一样
    3 (String pName,int pAge)是构造器形参列表,规则和成员方法一样
     */
    public Person(String pName,int pAge){
        System.out.println("构造器被调用~~完成对象属性初始化");
        name=pName;
        age=pAge;
​
    }
}

package chapter06.D9构造器;
​
public class ConstructorDetail {
    public static void main(String[] args) {
        Person1 p1 = new Person1("king",66);
        Person1 p2 = new Person1("88");
        System.out.println(p1.name + p1.Age);
        System.out.println(p2.name);
       //构造器不能用 p1.Person1()调用
        Dog dog1 = new Dog();//无参构造器调用
    }
}
class Person1{
    String name;
    int Age;
​
    //构造器重载,本质也是方法
    public Person1(String pname) {//快捷 alt+insert
        name = pname;
    }
​
    public Person1(String pname, int page) {
       name = pname;
        Age = page;
​
    }
}
/*
1 构造器名和类名相同
2 构造器没有返回值
3 构造器是完成对象初始化,不是创建对象
4 创建对象时候自动调用该类的构造方法
 */
class Dog{
    //若没有定义构造器,系统自动给类生成默认无参构造器
    //默认构造器会被有参构造器覆盖,此时若还想调用默认构造器,必须再显示定义
    /* Dog() {默认构造器
    }
​
     */
}

package chapter06.D9构造器;
​
public class ConstructorExercise {
    public static void main(String[] args) {
        Person2 p1 = new Person2();
        System.out.println("p1的信息 name="+p1.name+"age="+p1.age);
        Person2 p2 = new Person2("scott",50);
        System.out.println("p2的信息 name="+p2.name+"age="+p2.age);
    }
}
class Person2{
    String name;//默认null
    int age;
​
    public Person2() {//第一个无参构造器,设置所有人age属性初始值为18
        age=18;
    }
​
    public Person2(String pname, int page) {
        name = pname;
        age = page;
    }
}

package chapter06.D9构造器;
​
public class TestPerson {
    public static void main(String[] args) {
        Person3 p1 = new Person3("marry",20);
        Person3 p2 = new Person3("smith",30);
        System.out.println("p1和p2的比较结果="+p1.compareTo(p2));//p1>this  p2>p
    }
}
class Person3{
    String name;
    int age;
    public Person3(String name,int age){
        this.name=name;
        this.age=age;
    }
    public boolean compareTo(Person3 p){//名字和年龄完全一样
​
       /* if (this.name.equals(p.name)&&this.age==p.age){
            return true;
        }else {
            return false;
        }*/
        return this.name.equals(p.name)&&this.age==p.age;
    }
}

This

package chapter06.D9构造器;
​
public class This01 {
    public static void main(String[] args) {
        Dog2 dog1 = new Dog2("大壮",3);
        System.out.println("dog1的hashcode="+dog1.hashCode());//hashcode值可视为对象地址
        dog1.info();
        System.out.println("============================");
        Dog2 dog2 = new Dog2("大黄",2);
        System.out.println("dog2的hashcode="+dog2.hashCode());
        dog2.info();
    }
}
class Dog2{
    public String name;
    public int age;
​
    public Dog2(String name, int age) {
        this.name = name;//避免name=name 两个name全是构造器里的局部变量
        this.age = age;//this 指本次调用的对象
        System.out.println(this.hashCode());
    }
    public void info(){
        System.out.println(this.name+"\t"+this.age+"\t"+"当前对象的hashcode是:"+this.hashCode());
    }
}

package chapter06.D9构造器;
​
public class ThisDetail {
    public static void main(String[] args) {
        T t1 = new T();
        t1.f2();
        t1.f3();
​
    }
}
class T{
    String name="jack";
    int num=100;
    public void f1(){
        System.out.println("f1()方法..");
    }
    public void f2(){
        System.out.println("f2()方法..");
        //调用本类的f1方法
        f1();
        this.f1();//可调用方法
    }
​
    public T() {
​
        //访问有参构造器
        this("jack",100);//对this的调用必须是构造器中的第一个语句
        System.out.println("T()构造器执行了");
    }
    public T(String name,int age){
        System.out.println("T(String name,int age)构造器执行了");
    }
    public void f3(){
        String name="smith";
        System.out.println("name="+name+"num="+num);//就近原则访问局部变量
        System.out.println("name="+this.name+"num="+this.num);//访问属性(全局变量)
    }
}
举报

相关推荐

0 条评论