java类的引入

发布时间 2023-05-29 21:37:07作者: 踏浪而来的人

对比:  

 

构造方法:

  1. 方法名和类名相同

  2. 方法没有返回值,且用public修饰

  3. 可以有任意多个参数(默认是没有参数)

  注:可以有多个构造函数;

    当在实例化这个类的对象时,如果实例化的对象没有带参数,则调用没带参数的构造函数

class Person {
    String name;
    int age;
    String getName() {
        return "guangdong "+name;
    }

    /* construct method */    
    public Person () {
        name = "null";
        age  = 0;
    }

    public Person (String name) {//带一个参数的构造方法
        this.name = name;
    }

    public Person (String name, int age) {//带两个参数的构造方法
        this.name = name;
        this.age  = age; 
    }    
};

public class Oop3 {
    public static void main(String args[]) {
        Person p1 = new Person("zhangsan");//在实例化p1对象时,带一个参数的构造方法被调用
        Person p2 = new Person("lisi");
        Person p3 = new Person();//在实例化p3对象时,带没有参数的构造方法被调用
        Person p4 = new Person("wangwu", 6);//在实例化p4对象时,带两个参数的构造方法被调用

        System.out.println(p1.getName());
        System.out.println(p2.getName());
        System.out.println(p3.getName());
        System.out.println(p4.getName());
    }
}

this关键字:

  表示当前对象/当前类的属性,如上面person类中的name和age,this.name就表示当前类中的属性name;this.age就表示当前类中的属性age,所以用同名的name和age赋值就不会有冲突,如果没有this,那么name = name,根据变量的就近原则,这两个name都表示参数中的name,就不对。

 

static关键字:

  static修饰方法,叫做类方法,即可以不用实例化对象就可直接通过类.方法名直接调用

  static修饰属性,叫做类属性,也可以不用实例化对象就可直接通过类.属性名直接调用

  注:main方法就是用static修饰的,所以JVM不用实例化对象就能直接调用main函数了

class Person {
    static int count;//类属性
    
    String name;
    int age;
    String getName() {
        return "guangdong "+name;
    }

    /* construct method */    
    public Person () {
        count++;
        name = "null";
        age  = 0;
    }

    public Person (String name) {
        count++;
        this.name = name;
    }

    public Person (String name, int age) {
        count++;
        this.name = name;
        this.age  = age; 
    }

    static void printPerson () {//类方法
        System.out.println("This is a class of Person");
    }
    
};

public class Oop4 {
    public static void main(String args[]) {
        Person p1 = new Person("zhangsan");
        Person p3 = new Person();
        Person p4 = new Person("wangwu", 6);

        System.out.println(p1.getName());
        System.out.println(p3.getName());
        System.out.println(p4.getName());

        Person.printPerson();//调用类方法或类属性可以不用实例化对象
        System.out.println(Person.count);
    }
}

 

代码块:

  普通代码块:方法中用大括号{}括起来的

  构造代码块:先于构造函数执行,且每实例化一个对象,构造代码块就会执行一次

  静态代码块:实例化第一个对象前执行;先于构造代码块执行,且只会执行一次

class Person {

    static int count;
    
    String name;
    int age;
    String getName() {
        return "guangdong "+name;
    }

    static {//静态代码块
        System.out.println("static block");        
    }

    {//构造代码块
        System.out.println("construct block");
        count ++;
    }

    /* construct method */    
    public Person () {
        System.out.println("construct method: Person 1");
        name = "null";
        age  = 0;
    }

    static void printPerson () {//普通代码块
        System.out.println("This is a class of Person");
    }    
};
public class Oop5 { public static void main(String args[]) { Person p3 = new Person(); System.out.println(p3.getName()); Person.printPerson(); System.out.println(Person.count); } }