1. 面向对象(OO)开发 由 面向对象分析(OOA) 面向对象设计(OOD) 面向对象编程(OOP)三部分组成。
2.递归一定要向已知方向递归!!
例子:
f(0)=1 f(1)=4 …..f(n+2)=2f(n+1)+f(n),要求f(10)
代码应写为:
public int f(n){
if( n == 0 ){
return 1;
}
else if( n == 1){
return 4;
}
else{
return 2*f(n-1) + f(n-2);
}
}
如果已知f(20)= 1 f(21)=4 ……..f(n+2)=2f(n+1)+f(n),要求f(10)
代码应写为:
public int f(n){
if( n == 20 ){
return 1;
}
else if( n == 21){
return 4;
}
else{
return f(n+2) - 2*f(n+1);
}
}
3. this 和 super 不能用在static 的方法中。
4.多态 java中引用变量有两个类型,一个是编译类型,一个是运行时的类型
相同类型的变量,执行同一个方法时呈现不同的行为特征。这就是多态。
例子: 有一个父类叫BaseClass 有一个子类叫SubClass,继承自BaseClass. 子类覆盖了父类中的一个test方法。声明变量的时候这么写: BaseClass temp = new SubClass(); 这个时候调用temp的test方法,此时表现出的行为就是子类里重载后的行为,而不是父类中原来的行为。
个人认为:出现多态的根源是JAVA允许将子类对象直接赋给一个父类的引用变量。
这种情况下如果temp变量执行一个只有子类才有的方法,就会编译错误。因为temp的编译类型是BaseClass,编译无法调用子类里的方法。
如果一定要调用子类里的方法,就要使用引用变量的强制类型转换。
引用变量的强制类型转换只能将编译类型时父类,运行类型时子类的变量转换成子类类型。不能用于两个无关的引用变量类型。
instanceof 运算符可以在强制类型转换前判断一个对象是否为后一个类的实例。
引用变量来访问其包含的实例属性时,系统总是访问其编译时类所定义的属性,而不是运行时类所定义的属性。
5. 基本数据类型的包装类
这些包装类有个静态方法,可以把字符串转换成对应的基本类型parseXXX() ,反之,String类里也提供了valueOf()的方法实现了反向的功能。
例如
String aaa = "123";
int a = Integer.parseInt(aaa);
反向
int a = 1234;
String aaa = a.valueOf(a);
6.object类的toString() 方法
toString()方法是一个自我描述的方法。总是返回对象实现类的 类名+@+hashCode,可以在重写toString()方法来实现自己想要的返回。
7. == 来判断两个变量是否相等。还有 equals()方法
如果两个都是基本变量类型,且都是数值型(不一定要求数据类型严格相同),只要变量的值相等就会返回true
如果两个是引用类型的变量,必须指向同一个对象的时候,== 才会返回true.
equals()方法是object类提供的一个实例方法。大致和==相似,当变量是引用类型的时候也需要指向同一个对象才能返回true。但是java中String的equals()方法已经重写了,只要两个字符串包含的字符序列相同就能返回true。
equals()的好处是它可以按照自己想要的相等标准被重写。
8. 单例类
首先,构造函数被隐藏了(private)
然后,需要一个static的方法来构造类(这个方法里调用了隐藏起来的构造方法)
最后,需要一个static的属性来缓存构造出来的类实例,下次再创建时返还第一次创建的类实例。
例子:
class Singleton{
private static Singleton instance;
private Singleton();
public static Singleton getInstance(){
if(instance == null){
instance = new Singleton();
}
return instance;
}
}
9.final 修饰符 被修饰的变量获得初始值后不能被重新赋值。
final修饰成员变量的时候:
类属性:可在静态初始化中、声明该属性时指定初始值。
实例属性:可在非静态初始化、声明该属性、构造器中指定初始值。
final修饰基本类型变量和引用类型变量的区别:
修饰基本类型变量时,不能对变量重新赋值,因此基本类型变量不能被改变。
修饰引用类型变量时,变量保存的仅仅时一个引用,final只保证这个引用的地址不会改变,即一直引用一个对象,而对象完全可以发生改变。
final修饰的方法不能被重写,但可以被重载(就是传入参数不一样)
10. abstract 修饰抽象类和抽象方法,不能和final、static、private同时使用
接口比抽象类更抽象,接口只包含抽象方法。