java日常小笔记
java language
- 变量修饰符:static(类级变量or实例级变量)、final、volatile(可见并发性,强制从主内存读写)、transient(可否序列化)
- 方法修饰符:static final synchronized native strictfp abstract
- static块在类被初始化的时候,仅仅调用一次。
- 方法重写:
- 抛出的异常可以减少或删除,一定不能抛出新的或者更广的异常。
- 声明为final的方法不能被重写。
- 声明为static的方法不能被重写,但是能够被再次声明。
- 访问权限不能比父类中被重写的方法的访问权限更严格。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。
- java.lang.Cloneable接口是一个空的接口,没有申明任何属性与方法。该接口只是告诉JVM,该接口的实现类需要开放“克隆”功能。
- java函数传参是浅拷贝。=赋值也相当于浅拷贝,例如 ArrayList
list1 = list2 就只是赋于引用值,ArrayList list1 = new ArrayList (list2) 才是拷贝数值 - 继承:实际上,private,public,protected和继承没有关系,他们对成员函数和变量的限制只是在成员的可见性上。
- public允许来自任何类的访问;
- private只允许来自改类内部的方法访问,不允许任何来自该类外部的访问;
- protected允许来自同一包中的任何类以及改类的任何地方的任何子类的方法访问.
而关于成员变量的继承,父类的任何成员变量都是会被子类继承下去的,这些继承下来的私有成员虽对子类来说不可见,但子类仍然可以用父类的函数操作他们.
这样的设计有何意义呢?我们可以用这个方法将我们的成员保护得更好,让子类的设计者也只能通过父类指定的方法修改父类的私有成员,这样将能把类保护得更好,这对一个完整的继承体系是尤为可贵的. jdk源码就有这样的例子,java.util.Observable就是这样设计的.JDK
使用
64位JDK管理大内存,需要考虑以下问题:
- 内存回收导致的长时间停顿
- 现阶段,64位JDK的性能测试结果普遍低于32位JDK
- 需要保证程序足够稳定,因为这种应用要是产生堆溢出几乎就无法产生堆转储快照(因为要产生十几GB乃至更大的文件),哪怕产生了快照也几乎无法进行分析。
- 相同的程序在64位JKD中消耗的内存一般比32位JDK大,这是由指针膨胀及数据类型对齐补白等因素导致。
IO
InputStream类——available()方法返回输入流的大小。
使用:1
2
3FileInputStream fis = new FileInputStream("E:\\1.txt");
byte[] b= new byte[fis.available()];//定义一个刚刚好的数组
fis.read(b);//全部读完
InputStream类及子类(包括 FileInputStream BufferedInputStream)处理的都是字节流。OutputStream与之对应
Reader类及子类(包括FileReader BufferedReader)处理的都是字符流,构造函数需传入InputStream。Writer类与之对应
BufferedInputStream是包装类,必须传入要包装的InputStream。BufferedOutputStream与之对应
BufferedReader是包装类,必须传入要包装的Reader。BufferedWriter与之对应
InputStreamReader可以指定字符集,FileReader是使用系统默认字符集。OutputStreamWriter与之对应。例子:BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("E:\\笔记1.txt"),"GBK"));