关于类的基础:
1.类名必须和文件名相同。public class a{} 产生文件 a.java
2.类中main函数的写法固定 public static main(string[] args){ }
3.类里面有基本变量、对象、方法、代码块
按规范,变量或对象应该使用驼峰命名
抽象类 接口
(未完)
继承 多态.
(未完)
方法的调用
实例方法的调用 实例名.方法
类方法的调用 类名.方法
关于状态字static:
静态意味着它为所有实例所共享
类
类中要有静态成员,就必须是静态类。
静态成员变量,是被共享的。通过一个对象改了以后,这一块就变了。
方法
静态方法 非静态方法 可以通过类名调用。非静态只能通过对象名调用
对象
很少用到
代码块
代码块的执行顺序 static块>匿名块>构造函数
1.static块只在类第一次被加载时调用
2.匿名块每次调用类的时候会被执行
3.构造函数是在new对象的时候执行
4.注意执行顺序。比如匿名块都执行完以后才执行构造函数
建议把匿名块写法改成一个函数initial(),然后封装在构造函数里调用会更清晰。
单例模式
一个类只有一个对象,在类里面就写好;构造函数写成private;只能通过类的其他方法获得这个对象(的指针)。这种写法里,不是用new来获取这类的对象,开眼界了。
这种模式有利于数据共享。
关于状态字final
用来修饰类,则不能被子类继承
用来修饰父类中的方法,方法不能被子类重写。
用来修饰基本变量,则基本变量的内容就不能变了。
用来修饰一个对象,则对象的指针不能变了。如 class final obj = new class()
java中是这样的,int i = 10;则记住这整个i,指针+内容。class obj = new…则记住的是指针,指向一块内容(表达有点奇怪)
用public static final 即可轻松定义一个常量。注意,按规范常量应全大写,如
public static final int UPPER_BOUND
接口中的变量,编译器自动把它转变成一个常量。见第六章第四节常量设计
常量池
int short string character byte
1.这些包装类的常量都会存储下来,名字不同值相同的变量其实指向同一份东西,也就是地址相同。而且编译器有优化,如’a’+‘b’+‘c’ = ‘abc’, 在.class文件中只能看到’abc’
节约内存,共享访问
2.基本类型的包装类和字符串有两种创建方式
一种是赋值式创建,int a = 10;将被常量化,放在栈内存。
一种是new创建,Integer a = new Integer(10) ,不会被常量化,放在堆内存。
栈共享,堆是自己的(操作系统中有提到,线程)。栈内存容量小,速度快,堆内存容量大,速度相对慢。
3.关于是比地址还是值的比较;包装类,自动装箱与拆箱。
基本数据类型是没有方法的,java通过将他们包装成对象获得方法。对象和基本数据类型比较,对象会自动拆箱,比较值。对象和对象比较,则比较二者指针。包装类在缓冲池中,则两对象指针相同。