静态成员变量,匿名函数,匿名实现类


总结:1.被static修饰的成员变量(成员变量+成员方法)属于类,不属于这个类的某个对象;也就是说,多个对象在访问和修改static修饰的成员变量时其中一个对象static变量的值进行了修改
其他对象中的static值也跟着改变,即多个成员变量的值共享一个static成员变量,以最后一个赋值的值为标准.
2.被static 修饰的成员变量和方法可以并建议通过类名直接访问;类名.成员变量的属性;类名.成员变量的方法(参数)
3.main方法为静态方法仅仅为程序执行入口,它不属于任何一个对象,可以定义在任意类中;
4.静态常量的定义:用public static final 数据类型 变量名=值; 来修饰并完成定义,变量的全名用大写字母来写,单词直接用_连接
5.接口中的成员变量默认用 public static final来修饰
6.所以接口中的变量都是静态常量;用public static final修饰;由于接口没有构造方法所以必须赋值;可以通过接口名.变量名来访问
7.用static赋值后的属性和变量都属于类的不属于任何对象;static修饰的变量进数据共享区以最后一个赋的值为标准;变量都变成这个值
8.因为用static修饰的方法和属性可以通过类名直接调;所以不要用private修饰;把私有改成public,也不需要set和get方法;
9.Student.name;因为在Student类中name被static修饰了属于类的所以直接类名.属性名的方法调用就行且是共享数据
10.Student.show()因为在Student类中shwo()方法被static修饰成静态方法所以可以直接 类名.方法名()调用
11.static修饰的静态成员变量进数据共享区不进方法;但是普通的方法和属性进堆在赋值结束后会把地址赋值给接收的对象,因为static修饰的方法和变量不进堆也没有地址
只有在共享区里面;所以所有被static修饰的变量共有一个数据
12.静态方法不能调用非静态方法和变量,因为静态方法和变量随着类一起出现和编译,编译的顺序优先于对象和main方法,如果在静态方法调用非静态方法和变量会报错,
因为在静态方法编译的时候非静态的方法和变量还没有被编译会出找不到对象的错误
13.静态方法的运行还是要进栈但是数据和值要进数据共享区
14.静态的运行和编译顺序优先于对象和main方法,所以静态成员不能调用非静态成员,静态变量和方法不能用this和super,数据和值进入数据共享区(静态区)
15.Fu fu=new Zi() fu.i;因为这里是多态所以调用的是父类的i不是子类的i;调子类需要向下转型才能调用子类独有的方法和变量;就算是加上static静态修饰也是调用的父类的i
16.fu.show();多态调方法时,编译看父类运行看子类,如果加上static变成静态那么运行和编译都要看父类
17.成员变量:正常的多态:编译运行都看父类;加上static修饰的静态的多态变量:运行和编译都看父类
18.成员方法:正常的多态:编译看父类,运行看子类,加上static修饰的静态多态方法:运行和编译都看父类
19.内部类:将类写在其他类的内部,可以写在其他类的成员位置或者局部位置(成员内部类,局部内部类(定义的方法和变量一样));这时写在其他类内部的类叫内部类,其他类叫外部类
20.如果一个类的内部还可以写或者包含其他类比如汽车类包含了发动机类,那么我们称发动机类就是内部类,汽车类就是外部类
21.定义内部类的方法:就是一个正常类的定义过程也包含各种修饰符/继承/实现的关系;内部类可以直接方法外部类的属性和方法
22.成员内部类:class 外部类{修饰符 class 内部类{ 其他代码}};访问内部类:外部类名称.内部类名称 变量名=new 外部列名称().new内部类名称();
23.局部内部类:class 外部类{public void show(){class 内部类{其他代码}};局部内部类访问:在外部类的方法里面直接new内部类对象并直接调用就行
public void show(){class 内部类{public void in(){}} new 内部类() in();}直接调用就行
23.bin目录文件夹下都是.class文件,是编译后的机器语言,是交付给客户的
24.java目录文件夹下都是.java文件,是程序员写的原文件,是自己留的
25.匿名内部类,是局部内部类的一种;临时定义某一指定类型的子类,即刻创建这一刚刚定义的对象
26.格式:new 父类或接口(){};因为匿名内部类没有名字所以一帮会用多态也就是借用父类的名字来接,并调用方法和属性;父类 变量名=new 父类或接口(){}
27.public static void main(String[] args){
Smoke smoke=new Smoke(){ 这里数多态的应用,将子类new Smoke()对象赋值给父类Smoke smoke;因为匿名内部类没有名字所以得赋值父类引用,这样写就省去了创建一个实现类
public void smoke(){ system.out.println("抽烟")}这里直接给匿名内部类写了方法; new Smoking()这里new谁就是谁的匿名内部类
28.Smoke smoke=new Smoke()如果Smoke是个普通类那么这就是给Smoke new对象;但这里的Smoke是接口所以不可能new对象所以这里Smoke smoke=new Smoke()就是new匿名内部类
29.因为匿名内部类没有名字所以不能向下转型,如果要调子类独有的方法和属性就不要赋值父类多态了直接在new Smoke(){}.点出来就行了
30.构造代码块:是定义在类中成员位置的变量;优先执行与构造方法每创建一个对象就会执行一次;public class Person{pubic Person(){构造方法}{构造代码块}}
31.静态代码块:定义在成员变量的位置,用static修饰;优先于main方法执行,优先于构造方法执行,优先于所有人执行,且只执行一次
public class Person{public Person(){ 构造方法} 构造代码块{} static{静态代码块} };
32.java包:就是我们电脑中的文件夹存放类文件;当类很多时,我们会才用多个包进行管理,称之为分包管理
33.public:所有包都可用
34.protected:本包和其他包的子类 可用
35.default:同包(本包)下使用;变量不写修饰符就default就是默认
36.private:同类(本类)下使用

posted @ 2019-08-03 16:27  韩凯  阅读(312)  评论(0编辑  收藏  举报