Java基础总结

1、类

类比成“图纸”。

对事物、逻辑、概念、算法的抽象。

将相关的数据、算法代码进行封装,封装在一个类内部,形成一个独立的程序组装件。

2、对象、实例

类必成“产品”。

从类创建出的具体实例。

每个对象都是独立的,都占用独立的内存空间。

3、引用

类比成“遥控器”。

引用保存一个实例的内存地址。

引用的特殊值null,表示不引用任何实例的内存地址。

4、构造方法

特殊的方法,在新建实例的时候执行。

如果不编写构造方法,编译器编译代码时,会添加默认的构造方法。

public class Light{

public Light(){

}

}

构造方法可以重载。(所谓重载就是“同名不同参”)

public class Light{

public Light(){

}

public Light(int color){

}

public Light(boolean on){

}

public Light(int color,boolean on){

}

}

5、this

可以引用成员。this是一个特殊的引用,保存当前对象的内存地址。例如:this.name this.age this.gender

可以用在构造方法之间的互相调用。方式:this(); 注意必须是构造方法的首行代码。

Class A{

public A(a){

this(a,null,null);

}

public A(a,b,c){

this(a,b,c,null);

}

public A(a,b,c,d){

所有参数集中在此处处理。

}

}

6、继承、扩展

作用:代码复用。

一个类只能继承一个父类。一个父类可以有多个子类。

子类可以从父类继承有访问权限的成员。没有访问权限的成员不能继承,也不能继承构造方法。

1>创建子类实例的过程

(1)先创建父类实例,执行父类构造方法。

(2)在创建子类实例,执行子类构造方法。

(3)两个实例绑定在一起,作为子类实例。

(4)当调用成员时,会从子类到父类实例查找成员。

2> 创建子类实例时,构造方法执行

(1)先执行父类构造方法,默认执行父类无参构造方法,super();//会隐含调用这个

(2)也可以手动调用父类有参构造方法,使用super(传递参数);来调用

3>super

如果想要在子类构造方法中调用父类的构造方法,可以复用父类的构造方法。

方法是:super();//隐含调用

      super(传递参数);//手动调用

注意:在使用super的时候必须是子类构造方法的首行代码。

3>override

如果从父类继承的方法不适用于子类,在子类中可以重写编写这个方法。

7、多态

作用:一致的类型

类型转换:

1>向上转型

子类实例转为父类型。向上转型后,只能调用通用成员,不能调用子类的扩展成员。

2>向下转型

转为父类型的子类实例,在转回它的真实类型。

运行期类型识别

instanceof

对一个实例的真实类型及其父类型判断都得到true,也就是说Father son = new Son(); 其中son instanceof Son 得到true,son instanceof Father也得到true。

8、抽象类(abstract)

作用:提供通用代码或者通用方法的定义

是一个半成品,不能创建实例。

注意:包含抽象方法的类必须是抽象类。但是抽象类中不一定有抽象方法。

9、final关键字

可以用来修饰变量,方法,类

1>修饰变量时变量的值是不可变的,称为“常量”

final int a = 100;如果在编写a = 20;编译器会报错,不能对修改常量的值。

final Son s  = new Son(10,"boy");

s.age = 12;//这样是对的,可以修改对象的值,但是如果这样 s = new Son(12,"boy");这样就不对了

总结:基本类型值本身不可变;对于引用类型(对象),保存的内存地址不可变。如果对成员变量加final,那么没有默认值。

2>修饰方法时,不能在子类重写(编译器会报错)

3>修饰类时,不能被继承,也就是说没有子类(编译器会报错)

10、static静态

1>静态成员属于类,不属于实例;

2>访问静态成员时,允许使用实例调用静态成员,但是应该使用类名去调用;Utils.print

3>静态的使用场合

(1)原则是:能不用就不用

(2)使用场景:

<1>共享的数据Integer.MAX_VALUE,Math.PI等等

<2>工具方法

Integer.parseInt();String.valueOf();Math.pow();

(3)对于static修饰的代码块,在代码块中不能调用非静态成员。

class A{

int a  =10;

static int b = 20;

void f1(){

a

b

f2();

}

static void f2(){

b

//a不能用

//f1();不能用

}

}

11、对象创建的过程

Class A{

int a = 10;

static int b = 20;

public A(){

}

}


class B extends A{

int c = 30;

static int d  =40;

public B(){

}

}

B b = new B():

创建B实例的过程:

1>加载父类A,为父类的静态成员变量分配内存

2>加载子类B,为子类静态成员变量分配内存

3>为父类A的静态成员变量赋值

4>为子类B的静态成员变量赋值

5>为父类A实例分配内存,为父类A的非静态成员变量分配内存

6>为子类B实例分配内存,为子类B的非静态成员变量分配内存

7>为父类A的非静态成员赋值

8>执行父类A的构造方法

9>为子类B的非静态成员赋值

10>执行子类B的构造方法

12、String、StringBuffer、StringBuilder

其中String是常量,使用String定义的字符串不能改变,实际中每次对于String的操作都会创建一个新的对象。

StringBuffer是线程安全的。

StringBuilder是线程不安全的。

备注:想要获取一个对象的内存地址,可以获取改对象的hashCode();默认情况下,hash值及对象的内存地址。

13、Thread

Thread是程序执行的最小单元,它是分配CPU的最小单位。可以用Thread来执行以下异步操作。

Thread的运行是独立于Activity的,当Activity被finish后,如果没有主动停止Thread或者Thread里面的run方法没有执行完毕,Thread也会一直执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值