对比:
构造方法:
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); } }
标签:java,name,age,System,Person,引入,println,out From: https://www.cnblogs.com/zj-studyrecoding/p/17441740.html