1,构造方法,例如类名Person,构造方法就是public Person(){},public Person(参数){},public Person(){参数1,参数2},像这种形式的,名字与类名相同的,就是构造方法。而这种名字相同,参数不同的,称为重载,后期会具体讲到。
2,构造方法中最常用到的就是this,this代表当前对象,所以 this不能在静态方法里使用。使用形式为this.属性,this.方法,this(),其中this()可以用来调用其他构造方法,但调用时必须放第一行。
3,使用引用类型中,容易对引用产生的四点误解:
引用不一定在栈上,用new实例化后,就会在堆上。
引用不能指向引用,引用只能指向对象。
一个引用只能指向不同的对象,不能同时指向多个对象,因为每次new都会产生新的对象,有新的地址。
引用赋值null,表示该引用不指向任何对象。
4,代码块分为,本地代码块,实例(构造)代码块,静态代码块,同步代码块。其中用的较多的为构造代码块和静态代码块,构造代码块用于初始化实例数据成员,而静态代码块用于初始化静态数据成员和其他一些需要提前准备的数据。
5,代码块执行也有顺序,静态代码块最先执行,然后是实例方法,最后是构造代码块。如果都是静态代码块或者都是构造=代码块,此时代码块执行顺序和定义顺序有关。
6,基本数据类型拿不到地址,因此无法直接交换两个基本类型数据值,但是可以通过创建类,类是引用类型,可以利用它实例化两个对象,从而接收基本数据类型,完成交换。代码如下:
public static void swap(MyValue myValue1,MyValue myValue2){//利用类,实现基本数据类型的交换
int tmp=myValue1.getVal();
myValue1.setVal(myValue2.getVal());
myValue2.setVal(tmp);//换成私密类后,用get,set进行重新赋值,达到交换目的
}
public static void main2(String[] args) {
MyValue myValue1=new MyValue();
myValue1.setVal(10);
MyValue myValue2=new MyValue();
myValue2.setVal(20);
System.out.println(myValue1.getVal());
System.out.println(myValue2.getVal());
swap(myValue1,myValue2);
System.out.println("============");
System.out.println(myValue1.getVal());
System.out.println(myValue2.getVal());
}
代码执行效果:
7,时间复杂度
由于当下内存空间很大,成本很低,所以人们更关注的是时间复杂度。
时间复杂度本质说就是求一个运行执行次数,但实际情况并不需要求一个精确数字,而只需要知道一个大概的次数,所以我们一般只保留最高阶的那一项,并且最高阶前面相乘的常数一律为1,如果整体都是常数,则按1处理。这种估算方法称为 大O阶。 我们一般所说的就是最坏时间复杂度。
8,常用代码时间复杂度汇总,二分查找时间复杂度为对数O(log n);斐波拉契数列的递归算法,时间复杂度为等比数列求和,最终为O(2^N);
求时间或空间复杂度,不要光看代码,有时候需要带值观察。