心得暨TIJ笔记50条

心得暨TIJ笔记(原创)

1.overridden(覆盖也叫覆写)规则
  1).返回类型必须与所重写方法相同
  2).不能比所重写方法访问性差
  3).不能比所重写方法抛出更多异常
2.finally唯一不被执行的情况是system.exit()
3.访问权限
public>protected>(friendly)>private
4.抽象类中可不含抽象方法
5.transient
只能用于成员变量,不能用于局部变量,不能与final,static一起使用
6.volatile
既能用于变量又能用于常量,变量由于线程可能被异步修改,用于消除异步修改的可能性。
7.垃圾收集处于较低优先级,用来释放系统资源,而不是内存,调用时会唤醒父类的finalize方法
8.throws和throw不一定成对出现
9.接口中数据成员自动为public,static,final;
  函数自动为public,abstract但是不能为static;所以继承函数后要写上public
10.NaN不能用equals方法来判断
11.Void类是void数据类型的包裹类,不能被实例化,仅是一个占位符而已。
12.Java中整形数据不会发生溢出现象。最大整形数+1会得到最小值。
13.移位符有三种:>>,<<,>>>(注意没有<<<)
   左移操作符循环,如1<<32等价于1<<0=1,因为32%32=0
14.内存分为代码区,数据区,堆区,栈区,垃圾回收能管理的仅限于堆区。
15.对象存在形式分成两个部分:引用和引用所指向的内存块
16.String类中所有函数都具有这样的特性:
   在对字符串修改时,生成一个字符串备份,备份中实现字符串的修改,而原来字符串对象保持不变。
   改变字符串原则是如果没改变的话返回原始字符串,否则一个新字符串对象生成。
17.
1)在类object中,equals方法比较与==具有同样效果
2)不是类object,重写了object类中函数equals,按多态规则进行调用,还进行类型的比较,即比较类型和内容。重写equals的类有

String,Integer,Double,Date,File
18.switch后表达式类型,指定数组长度必须是byte,short,char,int之一,
19.创建和初始化按如下规则:
   1)分配存储空间与默认初始化
   2)递归使用如下步骤,对实例变量初始化
      i)绑定构造函数参数
      ii)在构造函数中,如果有this()语句则递归,再跳到v)
      iii)递归执行显示的或隐式的super()语句,直到object为止
      iv)执行显式初始化语句
      v)执行当前构造函数中语句

       递归:编译公式解释器在解析时,执行new运算符,在调用构造函数语句时,重复i)~v)
       this():同一类中其他构造函数调用语句
20.构造函数的执行总是“向上”调用的,先执行父类构造
21.在c/c++中“将较大生存空间中的变量遮蔽起来的能力”,java是不提供的。
22.留白的final:如果初始化不发生在定义处,一定在构造函数中初始化。
23.构造函数的原则:尽可能简单地让对象进入正常状态,如果可以的话,别调用任何函数,构造函数中唯一可以安全调用的函数就是类中的

final函数。
24.请以继承表达行为上的差异,以数据成员表达状态上的变化。
25.只能在Synchronized函数或同步区段中调用wait,在non-synchronized函数中调用wait和notify,执行时会收到异常。

sleep,suspend,resume都可在其中调用。
wait是实例方法,sleep,yield是静态方法。
26.本来不能将任何程序代码置于接口中,但静态内部类可是接口的一部分。
27.可以运用static inner class控制你的测试码,运行要:外围类名$内部类名
28.Unicode中高9位为0的字符和ASCII码中对应字符编码一致。
29.浮点数运算中,取余会出现NaN,除法运算会出现Infinity
30.Vector两个添加元素方法add和addElement
31.String和StringBuffer对象可连接。
32.类中static段不能throw
33.若用synchronized修饰static方法,static写在前面,即static synchronized
34.一元运算符会提升至int
35.不能给boolean变量赋值为null
36.NaN只有当NaN!=NaN才是true
37.-ea等价于-enableassertions(复数)
38.assert 的第二个表达式一定是个表达式,不能是void函数
39.main可以声明为final
40.对于一个非null引用a.a.equals(null)返回false
41.sqrt(参数)若参数为NaN或小于零,结果为NaN
42.数组可以定义成int[] count = null;
   int a[] = new int[]{1,2,3}
                    ^^
               这种情况这里不能有值
43.与类一级的内部类不同的是,局部类是按次序执行的,所以不能在定义之前创建一个类的实例。
44.局部变量不能被static修饰。
45.
1. class Parent{
2. private void method1(){System.out.println("Parent's method1");}
3. public void method2(){System.out.println("Parent's method2");method1();}
4.}
5.   public class Child extends Parent{
6. public void method1(){System.out.println("Child's method1");}
7.     // public void method2(){System.out.println("Child's method1");method1();}
8. public static void main(String args[]){
9. Parent p = new Child();
10. p.method2();
11.}
12.}
结果为:Parent's method2
 Parent's method1
分析:1)若把第2行的private改为public,则结果为
 Parent's method2
 Child's method1
      2)若把第7行的注视符号去掉,则结果为
 Child's method2
 Child's method1
      3)若把第3行注释掉,则会出现编译错误。

相关知识:
第一组
1).如果子类覆盖了父类的方法,那么子类对象调用该方法,被该方法修改的类的变量是子类的变量。
2).如果子类没有覆盖了父类的方法,而直接调用父类方法,那么被方法修改的类的变量是父类的变量。
第二组
1).默认状态下,该对象能且只能调用父类方法和父类变量(调用子类的方法会出现编译错误)此种情况下还有两种不同的情况:
  i)被调用方法是被子类覆盖的方法,这时候父类变量是不能被该方法修改的
  II)被调用方法是没有被子类覆盖的方法,这时候父类变量可以被该方法修改的
2).强制类型转换下,该对象能且只能调用其子类方法和子类变量
   此种情况下,也有两种不同的情况
   i)调用方法时强制转换
   ii)调用变量时强制转换
46.Vector和Hashtable是线程安全的
47.运行带有断言的程序时,若带有包名称或类名称,表示打开这些类或包。
   若包名称后有三个点,代表这个包及其子包。
   若只有三个点,代表无名包。
48.如果引用类型中的类没有定义这个成员,而在子类中定义了同名成员,编译将报错,即父类引用不能访问子类追加成员。
49.Collection---Set
             |
             ---List---LinkedList
         |
                 ---ArrayList
         |
         ---Vector---Stack

 Map---Hashtable
    |
    ---HashMap
    |
    ---WeakHashMap
总结:
1).涉及到堆栈,队列操作,考虑用list。对于需快速插入,删除元素应使用LinkedList。若需快速随机访问,使用ArrayList
2).若程序在单线程环境,或访问仅在一个线程中进行,考虑非同步的类,效率较高,如多线程同时操作,使用同步的类。
3).特别注意对哈希表操作,作为key的对象要正确覆写equals和hashcode
4).尽量返回接口而非实际变量,如返回list而非ArrayList,这样如果以后需要Arraylist仍然可以改变。
5).HashMap和Hashtable区别:
i).Hashtable是唯一实现Map中的thread-safe的类
ii).HashMap允许null作为key或value,hashtable不允许,会抛出空指针异常。
iii).HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法易让人误解。
50.Byte,Double,Float,Integer,Long,Short继承自Number,有些公共方法如intValue;Charater,Boolean继承自Object

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值