一、构造函数
1 怎么区分重载的方法:
(1)形参列表(2)返回值,只有方法返回值被赋予基个变量才能区分开来。
比如string foo() ,int foo();
如果只是执行foo(),则无法区分调用的是哪个方法。
如果int I = foo();则可以确定调用的是Int foo()。
2 如果你的类没有定义构造器,编译器会自动给你指定一个默认构造器。如果你定义了构造器,编译器就不会再给你指定默认构造器了,这时,People p = new People()是不能用的。除非你声明了public People(){}
3 this()可以在类体中当作构造函数使用。this(1) ,this(“hello”)
二、垃圾回收
垃圾回收器只回收用new分配的内存
三、数组初使化
对基本类型数组的初始化
int[] a = {1,2,3,4,5}; //创建组织a并且分配内存,并初始化
int[] b = a; //只是把a的引用赋给b,b相当于a相同数组的别名
int[] a = new int[6] 创建数组a并为其分配内存,没有初始化,默认为0
对类数组的初始化
Integer[] a = new Integer[4] //创建数组a,指定了其长度,但是a还只是一个引用,并未进行完整的初始化,要完成初使化,还得给其赋值,比如
a[0] = 0;
下面是对类数组使用花括号的方法进行完整初始化的方法
Integer[] a = {
new Integer(1),
new Integer(2),
3,
};
或
Integer[] a = new Integer[]{
new Integer(1),
new Integer(2),
3,
}
四、动态参数列表问题
void test(Object… args){}
可以进行以下调用
test(new Object[]{new Integer(1), new Float(1.1), new String(“232432”)})
test(new Integer(1), new Float(1.1), new String(“232432”));
第二种调用会直接转化为第一种
除了以Object为参数,也可以用任何一其他一种类型
void(String… args){}不过这种定义只能接受String或String的子类的对象作为参数
五、访问权限之public, protected和private
如果没有以上三个修饰词,则是“包访问权限”,代表只有当前包下的其他类才能访问这个属性或方法。
public:接口访问权限,对任何一个对象都是可用的。
private:除了自身,其他任何类都不能访问
protected:继承访问权限。它表示,只有子类能访问该成员。但是,该修饰符也有包访问权限,也就是同一个包下的其他类也可以访问该属性。
六、singleton:单例设计模式
只能生成一个对象,下面是一个单例模式的例子
package com.study;
class F{
private F(){
}
privatestatic F f = new F();
publicstatic F getFInstance(){
returnf;
}
publicvoid printF(){
System.out.println("What is good to you!");
}
}
publicclass Singleton {
publicstaticvoid main(String[] args){
F f = F.getFInstance();
f.printF();
}
}
杂:
(1)继承类的构造器中第一件事就是调用其基类的构造器
(2)如果将一个继承类的对象指给其父类的索引,比方说B继承自A
A a = new B();
而且B重写了A中的show()方法,那么b.show()执行是的A中的show()还是B中的show()?
执行的是继承类B的show()方法。因为a只是一个引用,它指向的内存存放的是B的对象,所以当然会调用B的方法。
(3)多态的好处与缺限
可扩展性,一个方法只需与基类通信,就可以授受所有继承类的对象,因为这些对象会向上转型。
缺限:“覆盖”私有方法
四、接口
1 抽象类是位于普通类与接口之间的一种中庸之道
2 抽象类被继承后,其导出类必须实现抽象类中的抽象方法,否则这个导出类也是抽象类。
3 抽象类的方法不必全是抽象方法,可以有普通方法
4 接口是一个完全的抽象,只定义方法声明,完全没有任何实现。它被用来建立类与类之间的协议。
5 接口声明的方法全是public的,即使没有加public修饰符
6 接口中的属性自动都是static和final的,即使你没有加这两个修饰符
7 接口使得多重继承可以实现,多重继承可以将一个对象向上继承为多个基类,从而带来更大的灵活性。
8 可以继承一个接口生成一个新的接口,只是,这时要用extends而不是implements
interface a {}
interface c {}
interface b extends a, c {}
9 工厂设计模型
生成遵循某个接口的对象的一个典型方式