Java 核心技术
l 字符串是用标准的Unicode 格式存储的
l main 方法必须声明为public,且必须是静态的
l 用花括号划分程序的各个部分称为块
l Byte 范围是-128到127 (包括0 一共256)
l 0x 16进制的前缀;0 是8进制的前缀;0b 是二进制的前缀
l double表示的精度是float的二倍,后缀加D;后缀加F
l Static final 设置一个类常量
l const是java保留关键字,goto 是保留字
l 位运算符>>, <<
l 不能使用没有进行赋值的变量
l 表示范围大的数据类型转为表示违反更小的数据类型,会有精度损失
l &&的运算优先级高于||;a&&b||c 等价于(a&&b)||c
l instanceof 是运算符
l 自定义枚举类型: 当变量的类型只在一个有限的集合内 。 例子:
Enum Size{small,medium,large,extra_large}
Size size = Size.medium; size的取某一个枚举值,或null
l 从jdk1.7 开始switch中case可以用字符串且可以使用中文
l BigInteger BigDecimal 这两个类可以处理包含任意长度数字序列的数字。不能使用+ 和* 处理这两个类的数据而是add 和multiply 方法:
BigInteger bigIntegerone = BigInteger.valueOf(100);将普通数值转换为大数值
BigInteger bigIntegertwo = BigInteger.valueOf(200)
BigInteger c = bigIntegerone.add(bigIntegertwo);
BigInteger d = bigIntegertwo.multiply(bigIntegerone);
l 声明数组 int [] a = new int [100]等价int a [] = new int [100]
int [] a = {1,2,3,4,5,6}
new int [] {1,2,3,4,5,6} 初始化一个匿名数组
允许数组长度为0 ,数组长度为0 和为null 有本质区别
创建一个数字数组时,所有元素都初始化为0,boolean数组的元素会初始化为false,对象元素的数组一律初始化为null
String [] names = new String [10];创建一个长度为10的字符串数组,每个元素初始化为null.数组具有定长性
二维数组就是数组中的每个元素也是一个数组
nums[1] [2] nums数组下标为1 的那个数组的下标为2 的元素
l 类是构造对象的模板或蓝图
l 不是所有的类都有面向对象的特征: 如 Math类
l 希望构造的对象可以多次使用,因此,需要将对象保存到一个变量中。一个对象变量并没有实际包含一个对象,而仅仅引用一个对象。任何对象变量的值都是对存储在另一个地方的一个对象的引用,new操作符返回的也是一个引用
l 如果需要返回一个数据时刻时变动的对象,就应该使用clone
Class Employee implements Cloneable
Employee original = new Employee(3434);
Employee copy = original.clone();
l 实例域和静态域,初始化块(class{初始化块});静态初始化块(static{静态初始化块}),实例初始化块
l 在启动程序时还没有任何一个对象。静态的main方法将执行并创建程序所需要的对象
l Java对对象采用的不是引用调用,实际上,对象引用进行的是值传递
l 返回类型不是方法签名的一部分,即不能有两个名字相同,参数列表相同只有返回值不同的方法
l 如果构造器的第一个语句是this(...),这个构造器将调用同一类的另一个构造器
l 注释: @param @return @throws @author @version
l this: 1、引用隐式参数 2、调用本类其他构造器
super: 1、调用父类方法 2、调用父类构造器
l 在继承链上进行向上向下转型,在向下转型时,要先使用instanceof 进行检查再进行强制转换
l 在什么情况下会使用没有抽象方法的抽象类
l 父类声明为private的内容子类也不能访问; protected对本包和所有子类可见
l equals 方法 判断两个对象是否具有相同的引用;使用 = = 比较基本类型域,使用equals比较对象域
l 只要对象一个字符串通过+连接起来,java编译就会自动调用toString()方法,以便获得这个对象的字符串描述
l 如果数组的元素较多,且经常需要在中间插入/删除时就应该考虑使用链表了
l ArrayList<T> T不能为基本类型 ,基本类型要转为包装类,包装类是final,所以不能有子类
l Object newArray = Array.newInstance(数组类型,数组长度);
l Array 类中的sort方法可以对对象数组进行排序,前提示对象所属的类必须实现了Comparable接口
l 在比较两个枚举类时,直接使用 = =; 每个枚举类有一个静态反方法 values,它将返回一个包含全部枚举值的数组:
Size [] values = Size.values();所有枚举类都是Enum的子类,
创建枚举类型要使用 enum 关键字
l If(e.getClass() == Employee.getClass())
l e.getClass().newInstance() 快速创建一个类的实例
l 反射机制最重要的内容----检查类的结构,Class 类中的getFields 返回类中的域、getMethods 返回方法 getConstructors 返回构造器 getDeclareFields getDeclareMethods getDeclaredConstructors 返回类中的全部域,方法和构造器
l 接口中所有方法自动属于public ;在实现接口时必须把方法声明为public
l 为什么有了抽象类还要引入接口,因为单继承,但是一个类可以实现多个接口,这弥补了java没有多继承的缺点
l 为什么要使用内部类:
1、 内部类可以访问该内部类定义所在的作用域中的数据,包括私有数据
2、 内部类可以对同一个包中的其他类隐藏起来
3、 当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类(只创建这个类的一个对象时)比较便捷
l 当需要捕获多个异常时, catch(IOException|UnknownHostException e ){ }
l 泛型类 :编写 泛型 类中不能 使用异常 反射和泛型类的结合使用
Public class pair<T>{
Private T first;
Private T second;
}
泛型方法:
Public static <T> T getMiddle (T a){
return a[a.length/2];
}
关键字、保留字和运算符 |
Const |
goto |
instanceof |
continue |
Switch case default break |
equals |
enum 创建枚举类 public enum EnumTest {} |
Assert 断言 如果断言为false 抛出AssertionError异常 |