1.关键字:package 一般为域名的倒写,特别的,org....一般有特定领域的(教育,。。)
import 导入包 一般用通配符*可全部倒入下一层包的所有文件,但仅限一层;
不导入包的写法:such as
//java.util.Date.date = new java.util.Date();不知道为好
java.lang包不用导入
2.修饰符default,不写默认是default
方法的重载——作用于方法,与原方法必须同名仅仅是参数上的区别:有两个方面:参数数据类型和参数数据个数
方法的重写——同上区别,与原方法同名且同参,包括参数数据类型和个数的一致
3.构造方法:new时调用 不自己定义系统有默认的构造方法,无参的
Java特性之一——封装性:比如set/get(快捷键Ctrl+s)方法,对外只提供接口
4.子类的实例化:先调用父类的构造方法,在调用子类(自己的)
Car car = new mycar() //父类引用指向子类对象,详情画出内存图
5.Java为什么只能单继承?怎样实现多继承?
答:为了使结构不发生混乱,本质上是因为
从技术的角度来说,是为了降低复杂性。例如,A类中有一个m方法,B类中也有一个m方法。如果C类单独继承A类或者B类时,C类中的m方法要么继承于A类,要么继承于B类。
而如果多重继承的话,C类的m方法有可能来自A类,又有可能来自B类,就会造成冲突。这样的继承关系,就会增加复杂性,甚至进一步影响多态的灵活性。
实现多继承,技术上用的是多态
Java明确定义,一个子类只能有一个直接的父类,不允许有多个。
即是:a extends b extends c extends D.........
不允许:a extends b,c,D........
内部类可以实现多继承,for example:
classExample1 {publicString name()
{return"liutao";
}
}classExample2 {publicintage()
{return25;
}
}classMainExample
{privateclasstest1extendsExample1
{publicString name()
{returnsuper.name();
}
}privateclasstest2extendsExample2
{publicintage()
{returnsuper.age();
}
}publicString name()
{returnnewtest1().name();
}publicintage()
{returnnewtest2().age();
}publicstaticvoidmain(String args[])
{
MainExample mi=newMainExample();
System.out.println("姓名:" +mi.name());
System.out.println("年龄:" +mi.age());
}
}
6.eclipse快捷键
补全代码:Alt+/
构造函数:Ctrl+s
整段注释:Ctrl+shift+/ 取消注释:Ctrl+shift+\
7.基本数据类型的包装类
int——Integer char——Character 其他均为首字母大写 Number 子类
除了Integer和Character定义的名称和对应的基本类型差异大,其他六种都是将首字母大写就可以了。
Integer,Byte,Float,Double,Short,Long都是Number类的子类。(Number类后面讲);
Character和Boolean都是Object直接子类;
8个类都是final修饰的(不可被继承)。
在Java中要将 String 类型转化为 int 类型时,需要使用 Integer 类中的 parseInt() 方法或者 valueOf() 方法进行转换.
例1:
String str ="123";
try{
inta = Integer.parseInt(str);
}catch(NumberFormatException e) {
e.printStackTrace();
}
例2:
String str ="123";
try{
intb = Integer.valueOf(str).intValue()
}catch(NumberFormatException e) {
e.printStackTrace();
}
在转换过程中需要注意,因为字符串中可能会出现非数字的情况,所以在转换的时候需要捕捉处理异常
整型类的享元模式:
Integer a = 123; Integer b = 123; 相等吗?true
Integer a = 246; Integer b = 246; 相等吗?false
why????
public static Integer valueOf(int i) {
assert IntegerCache.high >= 127;
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
==比较的是地址值 Integer的数据直接赋值,如果在-128到127之间,会直接在缓冲池里获取数据。针对-128到127之间的数据,做了一个数据缓冲池,如果数据时该范围内的每次并不创建新的空间。因为创建了新空间地址值不同所以是false,用equals比较就是true。