Java拾遗1

1、纯粹的面向对象,编译型和解释型语言,编译直接生成特定平台机器码的就是编译型语言。每次运行都需要重新编译解释运行的就是解释型语言。java先由javac编译.java文件生成.class字节码文件。java解释器就是JVM,java通过JVM跨平台。jre包含jvm,javase是基础。

2、编译:javac -d destdir srcFile         运行:java 类名

类必须包含public static void main(String[] args)方法才能被解释执行,如果源代码有一个public类,文件名必须和这个类名字相同,因为一个源文件最多包含一个public类定义。

3、面向对象:对象、类、继承、封装、多态、消息,java不支持多继承。核心属性是继承和多态。

4、强类型语言:变量先声明后使用,类型要匹配。单行注释、多行注释和文档注释。关键字都是小写。

5、基本类型:boolean、byte、short、int、long、char(unicode,2字节)、float和double。

BigInteger、BigDecimal用于高精度计算。

引用类型:类、接口和数组。null。数值可以用下划线分割。自动类型转换和强制类型转换。

6、运算符和C一样。控制结构顺序、分支、循环和C一样。

数组定义   type[]  arrayname,静态初始化:new type[] {element1,element2,....}         动态初始化:new type[length]

多维数组:type[][] arrayname          new type[length][]

7、foreach循环,遍历数组和集合(可迭代的都可以遍历)。for(type variname:array|set)

8、[修饰符] class 类名

{

    零到多个构造器定义...

    零到多个成员变量定义....

    零到多个方法定义....

}

public proected private  static final   abstract

系统有默认构造器,this指针

static修饰的是类成员

函数参数是传值,形参个数可在最后一个参数类型后增加三点表示不限参数个数。

9、形参不同为重载。访问控制级别:private——default(包访问权限)——protected——public。

包管理:同一包中的类不必位于相同目录下。包管理两条:源文件用package指定包名,class文件放在对应路径下。

Java默认为所有源文件导入java.lang包下的所有类。

10、构造器被new调用,重载构造器之间的调用通过this,构造器调用置于最开始处,通过this只能调用一个构造器,不能调用2个。

11、继承通过extends,所有子类默认继承自java.lang.Object,子类覆盖父类方法,遵循两同两小一大原则,super调用父类方法,子类构造器总会默认调用父类构造器一次。

12、编译时类型和运行时类型不一致就会出现多态。实例变量没有多态性,只有方法有多态性。用instanceof确保可以强制转换成功。组合类。

13、初始化块,初始化公共属性,静态初始化块。

14、基本类型的包装类,自动装箱和自动拆箱。基本类型和字符串之间的转化。

15、final修饰的基本变量只能赋值一次,必须显示初始化。final修饰引用变量时,引用不可变,指向的内容可变。final修饰的方法不可被重写。final修饰的类不可有子类。不可变类用private和final修饰成员变量。

16、abstract抽象类,不可被实例化,可以包含成员变量、方法、构造器、初始化块、内部类。abstract不能修饰成员变量、构造器。抽象类可以有普通方法。

17、接口全部是抽象方法,用interface定义,可以多继承,只能继承接口。不包含构造器和初始化块,可以有静态成员变量、抽象方法、内部类,public访问权限,普通方法只能是public abstract,类方法、默认方法必须有方法体,成员变量默认public static final。类实现接口用implements,必须放在extends之后。必须实现所有的抽象方法。接口只能包含抽象方法和默认方法,不能有静态方法,只能有静态常量。

18、内部定义类为内部类,内部类可以访问外部类的私有数据,外部类不能直接访问内部类的成员(需通过实例访问),非静态内部类不能拥有静态成员。成员内部类相当于成员,局部内部类和匿名内部类不是类成员,.this和.new。访问外部类的引用用OuterClassName.this。

静态内部类(嵌套类)的创建不需要外部类对象的引用。内部类嵌套N层,最里面的内部类依然可以访问最外层类的所有成员。继承了某个外围类的时候,内部类并没有发生变化,子类和父类的内部类是完全独立的两个实体。

19、外部类只需包访问权限和公开访问权限,非静态内部类不能有静态成员,静态内部类是类相关,接口里的内部类只能是静态类。局部内部类在方法里定义。

20、匿名内部类,必须继承一个父类或实现一个接口,定以后立马实现然后消失。每个内部类都能独立继承自一个实现,无论外部类是否继承了这个实现,多重继承的又一法宝,内部类提供了类似闭包功能。在匿名内部类中定义字段时还能对其初始化。

21、lambda表达式,主要作用就是替代内部类的繁琐语法。。lambda的目标类型必须是明确的函数式接口,只能实现一个方法即只能为有一个抽象方法的接口创建对象。        (形参列表)——>{....  return:});可以省略小括号和花括号。

方法引用和构造器引用。

22、enum定义枚举类,默认使用final修饰符,构造器使用private,所有实例必须在枚举类第一行显示列出。枚举类实例只能是枚举值。

23、垃圾回收调用对象的finalize方法,用户不用过多使用finalize方法,System.gc回收。

24、Scannerl类获取输入,System类,Object类,Objects类,String,StringBuffer,StringBuilder,Math,Random,BigDecimal

25、java集合

26、泛型针对集合记不住数据类型会抛出异常而设计,java的参数化类型称为泛型,允许使用菱形语法。允许在定义类、接口和方法时使用类型形参,可以为任何类添加泛型声明。泛型被继承时必须指明类型形参。没有泛型类,都是同一个class。泛型通配?。

27、异常机制,try  catch  finally   throw throws  Checked异常和Runtime异常

28、泛型、集合、反射、异常、多线程

29、代码风格:类名每个单词首字母大写,其他所有内容也一样只不过首单词首字母小写。

30、对象比较实际内容用它的equals方法,需覆盖。可以用this调用一个构造器,不能调用两个。

31、有符号右移 >>,无符号右移>>>,布尔类型不允许进行类型转换,不能进行算术运算,没有sizeof。用标签取代goto,和break、continue结合使用。

32、静态初始化只有在必要时刻才进行,类访问权限只可能有public和包访问权限。

33、final修饰的变量在定义时赋值或在构造器中赋值都可以。在形参列表中使用final修饰。

34、加载的顺序:基类的static成员、子类的static,基类构造器,子类构造器。

初始化的实际过程:在任何事物发生之前将分配给对象的存储空间初始化为二进制的零,调用基类构造器。

35、RTTI,Class对象,Class.forName  getClass,.class反射

36、Java定义了true和false。类的成员为基本类型,默认初始化为0。

37、javadoc,/**   */   ,只能为public和protected成员进行文档注释。javadoc标签 @author等。

38、==比较对象的引用,比较值用equals方法。equals默认行为是比较引用,自己创建的类需要自己覆盖这个方法来比较值,大多数类库都实现了这个方法来比较内容。

39、Java不允许创建局部对象,必须用new创建对象。未初始化的函数局部变量会报错。不允许指定数组大小。

可变参数列表         Object....args

子类会默认调用基类默认构造器,若想调用基类带参构造器则需要用super显示调用。

40、迭代器是一个对象,它的工作是遍历并选择序列中的对象,不必关心序列底层的结构,Java的Iterator只能单向移动。使用iterator方法要求容器返回一个Iterator,使用next获得序列中的下一个元素,使用hasNext检查序列中是否还有元素,使用remove将迭代器新近返回的元素删除。

41、如果要进行大量的随机访问,就用ArrayList;如果经常要插入或删除就用LinkedList;各种Queue及栈的行为由LinkedList提供;HashMap用来快速访问,TreeMap保持键始终处于排序状态,HashSet提供了最快的查询速度。新程序中不应使用过时的Vector、Hashtable和Stack。

容器的简单分类,其实只有Map、List、Set和Queue4种容器,常用容器用黑粗线标出来了,点线框是接口,实现框是普通的类。

42、标准异常类有两个构造器:一个是默认构造器,另一个是接受字符串作为参数以便把相关信息放入异常对象的构造器。

异常根类Throwable,Exception继承自它,它有一个printStackTrace方法。

异常说明 throws,紧跟在形式参数列表之后,以礼貌地方式通知客户端程序员某方法可能会抛出异常。

代码里抛出了异常有2种处理方法:处理这个异常;使用异常说明。

捕获所有异常: catch (Exception e)

栈轨迹getStackTrace

Error和Exception,

43、用于String的+和+=是Java仅有的两个重载操作符,Java并不允许程序员重载任何操作符。

StringBuilder提供了丰富而全面的方法,如append、toString、replace、reserve等。Java SE5之前使用StringBuffer,是线程安全的,开销大。

System.out.println         System.out.format          System.out.printf,后两者等价,

所有的格式化功能都由java.util.Formatter类处理。

44、Class.forName取得目标类的引用。如果已经有对象实例,则通过getClass获取Class引用。

类字面常量:xxx.class,

java.lang.reflect,包含Field、Method以及Constructor类。

RTTI和反射的区别:对于RTTI来说,编译器在编译时打开和检查.class文件,反射是在运行时检查。

猜你喜欢

转载自blog.csdn.net/chenkaifang/article/details/81146912