1、包名应该由全部小写字母组成;
2、sun公司建议使用公司Internet域名倒写来作为包名;
3、一个源文件只能定义一个包,即只能包含一条package语句,同一个包下的类可以自由访问;
4、子包和父包在用法上不存任何关系,如父包中类需要使用子包中的类,不需使用子包的全名,不能省略父包部分;
5、Java默认为所有源文件导入java.lang包下的所有类,因此前面在java程序中使用String、System类时都无需使用import语句导入这些类
6、可以在一个构造器中用this来调用其他重载的构造器的初始化代码,而且必须作为构造器执行语句的第一条语句
7、java的子类不能获得父类的构造器
8、如果编译时类型和运行时类型不一致,就会出现所谓的多态,如:BaseClass ploymophicBc=new SubClass();
此例子中,编译时的类型是BaseClass,运行时的类型是SubClass;
9、引用变量在编译阶段只能调用其编译时类型所具有的方法,但运行时则执行它运行时类型所具有的方法,例如:
Object p=new Person();定义了一个变量p,则这个p只能调用Object类的方法,而不能调用Person类里定义的方法;
10、与方法不同,对象的属性则不具有多态性;
11、通过引用变量来访问其包含的实力属性时,系统总是试图访问它编译时所定义的属性,而不是它运行时类所定义的属性
12、基本类型之间的转换只能在数值类型之间进行,这里所说的数值类型包括:整数型、字符型、浮点型。但数值类型不能和
布尔型之间进行类型转换
13、引用类型之间的转换只能把一个父类变量转化成子类类型,如果是两个没有任何继承关系的类型,则无法进行类型转换,否则编译时
就会出现错误。如果试图将一个父类实例转换子类类型,则必须这个对象实际上是子类实例才行(编译时为父类类型,运行时为子类类型);
14、将子类对象赋给父类引用变量时,被称为向上转型,是可以成功的,但是将一个父类对象赋值给子类引用变量时,需要强制类型转换;
15、instanceof运算符的前一个操作数通常是一个引用类型的变量,后一个操作数通常是一个类(也可以是可以理解为特殊类的接口),
它用于判断前面的对象是不是后面的类,或者其子类、实现类的实例。如果是返回true,否则返回false;
16、如果想把某些类设置成最终类,即不能被当做父类,则可以使用final修饰这个类
17、用到继承应具备以下两个条件之一:①子类需要额外增加属性,而不仅仅是属性值的改变
②子类需要增加自己独有的行为方式(包括增加新的方法或者重写父类的方法)
18、继承要表达一种“是(is-a)”的关系,而组合表达的是“有(has-a)”的关系
19、一个类里可以有多个初始化块,相同类型的初始化块之间有顺序:前面定义的初始化块先执行,后面定义的初始化块后执行,初始化块的修饰符只能是static,
初始化块里的代码可以包含任何可执行的语句;初始化块总是在构造器之前执行;与构造器不同的是初始化块是一段固定执行的代码,不能接受任何参数;
与构造器类似,当创建一个java对象时,不仅会执行该类的普通初始化块和构造器,系统会一直上溯到java.lang.Object,先执行java.lang.Object的初始化块和构造器,依次向下执行
其父类的初始化块,开始执行其父类的构造器,最后才执行本类的初始化块和构造器
20、如果初始化块使用了static修饰符,则为静态初始化块,是类相关的;系统将在类初始化阶段执行静态初始化块,而不是在创建对象时再执行,因此静态初始化块总是比普通初始化块先执行
通常用于对类属性执行初始化处理,静态初始化块不能对实例属性进行初始化处理;同样不能访问非静态成员,同样会上溯先执行父类的静态初始化块
总而言之,先依次向下执行父类的静态初始化块,再一次向下执行父类的初始化块、构造器,初始化块、构造器。。。当再创建一个对象时,静态初始化块不会再执行,从最顶级的父类初始化块、构造器开始执行
21、八种基本数据类型对应的包装类中除了int(Integer)和char(Character)外,其他六种都是首字母变大写即可
22、把基本数据类型转换成包装类实例是通过对应包装类的构造器来实现的
23、如果希望获得包装类对象中包装的基本数据类型变量,则可以使用包装类的xxxValue()方法,如intValue(),floatValue();但是JDK1.5后,提供自动装箱和自动拆箱,直接赋值即可
24、将一个特定基本类型转换成字符串用parseXxx(String s)静态方法,将基本类型装换成字符串用valueOf()
25、通过重写toString()方法,在println()中能够输出你想要描述的toString()里面的内容