老规矩,贴代码做注释:
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;}public Person (String name) {System.out.println("construct method: Person 2");this.name = name;}public Person (String name, int age) {System.out.println("construct method: Person 3");this.name = name;this.age = age; }static void printPerson () {System.out.println("This is a class of Person");}};public class Oop5 {public static void main(String args[]) {Person p1 = new Person("zhangsan");Person p2 = new Person("lisi");Person p3 = new Person();Person p4 = new Person("wangwu", 6);System.out.println(p1.getName());System.out.println(p2.getName());System.out.println(p3.getName());System.out.println(p4.getName());Person.printPerson();System.out.println(Person.count);}
}
1、这部分代码包含了,构造函数
Public person 的多态问题
2、代码块还有静态代码块的问题
3、this代表类,类中函数能代表局部就代表局部,没有局部的时候才代表全局类中的变量。
以上
String getName() {return "guangdong "+name;}
```这就属于一个default权限的类函数。权限在于本java包中是相当于public使用的。但是在其他的包里是不能被调用的。
再一个,代码块是每实现一次类实现调用一次,而且要先于构造函数先执行,至于静态代码块,也就是vm加载的时候执行一次。
没什么技术含量,记住就行了。还有插一句,这个println在java中是允许“+”来拼接字符串的而且直接System.output.println(var);就能打印出来var的数值。System.output.println(“世界人民大团结“+var);就完成了拼接,好特么神奇。4.对于静态代码块,引用的count也是static int,我尝试将static修饰去掉后代码报错,提示 错误: 无法从静态上下文中引用非静态 变量 countSystem.out.println("static block"+count);
又学到了一点。
5.如果改成代码块调用非静态的count也没有问题
6.如果用代码块调用静态的count也没有问题。
7. String name;int age;static String getName() {return "guangdong "+name;}
这样在静态函数中调用非静态成员age也会报错。故而我总结出来,在java编程中,静态的代码块(包括普通代码块等)是不能够调用非静态成员的。惊不惊喜,意不意外,哇咔咔咔,举一反三。