Java基础笔记之面向对象基础

1.    Java中八种基本数据类型

byte 8 bits/1 bytes

short 16 bits/2 bytes

int 32 bits/4 bytes

long 64 bits/8 bytes

float 32 bits/4 bytes

double 64 bits/8 bytes

char 16 bits/2 bytes

Boolean 1 bits

2.    如果源文件中有public类,则该源文件名称必须与该public类名相同

3.    Java严格区分大小写

4.    文档注释

格式:/**                            */

命令:javadoc [options] [java sourcefile/packet]

Javadoc会默认注释public或protected修饰的内容,如果要注释private修饰的内容则需添加 –private选项

5.    二进制数的表示

正数:以原码表示

负数:以补码表示,最高位为1

负数转十进制:补码-1 --->反码(符号位不变,其他位取反)--->原码

6.    修饰符

public:         无论它所处在的包定义在哪,该类(接口、成员)都是可访问的。

protected:  成员只能在定义它的包中被访问,如果在其他包中被访问,则实现这个方法的类必须是该成 员所属类的子类。

private:      成员只可以在定义它的类中被访问,不会被继承。

static:         静态成员在类初始化时初始化,它只属于类不属于任何对象。

                    静态成员方法只能访问静态成员变量,不能访问普通成员变量

                    普通成员方法可以访问静态成员变量

                    静态成员方法不可以调用普通成员方法

                    普通成员方法可以调用静态成员方法

final:          被定义成final的类不允许出现子类,不能被覆盖,字段值 不允许被修改。

abstract:   类中包括没有实现的方法,不能被实例化。如果是一个abstract方法,则方法体   为空,该方法的实现在子类中被定义,并且包含一个abstract方法的类必须是abstract类。

package:    类的默认修饰符,只能在包类访问。

7.    如果想在静态成员方法中访问普通成员访问,则只能重新创建一个对象

8.    Java中的参数传递机制为:值传递。

9.    函数重载:函数名称相同,参数列表不同,返回类型不同不可作为函数重载

10.   构造器重载:使用this调用另一个重载的构造器只能在构造器中使用,而且必须作为构造器执行体的第一条语句。使用this调用重载构造器时,系统会根据this后括号里的实参来调用形参列表与之对应的构造器。

11.   继承:

子类不能继承父类的构造器;

如果需要在子类方法中调用父类被覆盖的实例方法,则可使用super限定来调用父类被覆盖的实例方法;

在一个构造器中调用另一个重载的构造器使用this调用来完成,在子类构造器中调用父类的构造器使用super调用来完成;

创建任何对象总是从该类所在继承树最顶层类的构造器开始执行,然后依次向下执行,最后才执行本类的构造器。如果某个父类通过this调用了同类中重载的构造器,就会依次执行此父类的多个构造器。

12.   多态:

子类的每一个对象都是超类的子类,反之不成立;

编译时类型由声明变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定;

子类对象可直接赋值给父类引用对象;

只能用子类的构造器实例化父类对象:

如果从父类继承过来的方法没有被覆盖,则调用父类对象的方法;

如果被覆盖了,则调用子类对象的该方法;

如果调用子类中的方法,而父类中没有定义该方法时,则会导致编译时出错;

引用变量只能调用其编译时类型的方法,而不能调用其运行时的方法。

总结:引用变量在编译阶段只能调用其编译时类型所具有的方法,但运行时则运行其运行时类型所具有的方法。

13.  引用变量的强制类型转换

只有一种情况才能使用强制类型转化:编译时类型为父类类型,运行时类型为子类类型。

总结:将引用类型变量转化成其子类类型。

14.  instanceof运算符:用于判断前面的对象是否是后面的类(子类/实例类)的实例,如果是,返回true,否则返回false。可以用instanceof运算符判断是否可以成功转化。

15.  普通初始化块

当创建java对象时,总是先执行类里定义的初始化块;

初始化块只在创建Java对象时隐式执行,而且在执行构造器之前执行。

16.  静态初始化块

用static修饰,也称为类初始化块,静态初始化块在类初始化阶段执行,而不是在创建对象时执行,因此静态初始化块总是比普通初始化块先执行。

17.  Object的自我描述:toString()方法。

18.  String str = “Hello” 与 Stringstr = new String(“Hello”)  的区别

String str = “Hello”, JVM使用常量池来管理这些字符串;

new String(“Hello”), JVM会先使用常量池来管理”Hello”直接量,再调用String类的构造器来创建一个新的String对象,新创建的String对象保存在堆内存中,因此总共产生了两个对象。

常量池:constant pool ,专门用于管理在编译期被确定并被保存在已编译的.class文件中的一些数据,它包括了关于类,方法,接口中的常量,还包括字符串常量。

19.  equals 与 ==:equals用来判断引用变量是否指向同一个对象,==用于基本数据类型是否相等。

20.  单例类

通过getInstance方法得到实例,可以保证Singleton类只能产生一个对象。

21.  final 修饰符:可修饰类,变量和方法

final成员变量

final修饰的成员变量必须由程序员显式地指定初始值,不能在初始化之前访问该成员变量。如果未指定初始值,则系统会自动指定初始值。

修饰类成员变量(static修饰):必须在静态初始化块中或声明该成员变量时指定初始值。

修饰实例成员变量(非static修饰):必须在非静态初始化块,声明该成员变量或构造器中指定初始值。

final局部变量

系统不会对局部变量进行初始化,局部变量必须由程序员显式初始化,因此局部变量必须在定义时初始化,或者在后面赋一次值(只能一次)。

final修饰基本类型变量和引用类型变量的区别

当使用final修饰基本类型变量时,不能对基本类型变量重新赋值,因此基本类型变量不能被改变;

当使用final修饰引用类型变量时,引用类型变量不能被改变,但可以改变引用类型变量所引用对象的内容。

final方法:final修饰的方法不可被重写,用于不希望子类重写从父类继承过去的方法。

final类:不能被继承的类,也就是说没有子类。

22.  抽象类和抽象方法  abstract

抽象类和抽象方法必须使用abstract修饰符来修饰;

抽象方法不能有方法体,抽象方法必须由子类重写;

抽象类不能被实例化;

含有抽象方法的类只能被定义成抽象方法;

抽象类中可以含有普通方法。

[注1*]  当使用abstract修饰类时,表明这个类只能被继承;当使用abstract修饰方法时,表明这个方法只能被重写。因此abstract与final不能同时出现。

[注2*]  使用abstract修饰的方法必须被其子类重写才有意义,因此abstract与private不能同时出现。

抽象类的作用:作为子类的通用模板。

23.  接口 interface

接口定义的基本语法:

[修饰符]    interface    接口名    extends    父接口1,父接口2…..

{

                零到多个常量定义…

                零到多个抽象方法定义…

}

接口只能用public修饰,或者省略修饰符,默认为包内修饰;

一个接口可以有多个父接口,但接口只能继承接口,不能继承类。

24.  使用接口

基本语法: ……   implements 接口名

25.  内部类(嵌套类):将一个类放在另一个类内部定义

内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类;

匿名内部类适合用于创建那些仅需要一次使用的类。

1>    非静态内部类

可以当作外部类的普通成员,可以被public,protected, private修饰。

       非静态内部类可以直接访问外部类的私有数据,因为内部类被当成其外部类成员,同一个类的成员之间可以互相访问。但外部类不可以访问内部类的具体实现细节,例如内部类的成员变量;

非静态内部类的成员只在非静态内部类范围内是可知的,不能直接被外部类使用。如果外部类需要访问非静态内部类的成员,则必须显式创建非静态内部类对象来访问其实力成员;

非静态内部类必须寄存在外部类对象中,而外部类对象则不必一定有非静态内部类对象寄存其中;

不允许在外部类的静态成员中直接使用非静态内部类。

2>    静态内部类

用static修饰,属于外部类本身,而不是属于外部类对象,static只能修饰内部类不能修饰外部类;

静态内部类不能访问外部类的实例成员,只能访问外部类的类成员;

静态内部类的实例方法也不能访问外部类的实例成员,只能访问外部类的静态成员。

3>    匿名内部类

匿名内部类的格式:

<1>  继承一个父类

new  父类构造器(实参列表)

{

 

}

<2>  实现一个接口

  实现接口()

{

 

}

两条规则:匿名内部类不能是抽象类;匿名内部类不能有构造器。

26.  枚举类:暂时保留

 

27. 类初始化顺序:静态(块、方法、成员)à父类构造器à普通(块、方法、成员)à构造器。

28. 用private和final修饰成员方法的差别

Private和final修饰的方法都不能被子类继承,也就是不能被子类重写;

Final修饰的方法可以在类外部被其类实例调用,而private修饰额方法不能被其类实例调用。

 

29. 抽象类与接口

相同点:

1>抽象类与接口中的抽象方法不能有方法体,必须被子类重写。

2>抽象类和接口都不能实例化对象。

不同点:

1>抽象类中可以有一部分方法不是抽象方法,可以不被子类重写,而接口中的所有方法都是抽象方法,都必须被子类重写。

2>抽象类可以有构造器,实际上会默认有一个不带参的构造器,而接口没有。

3>抽象类的成员变量跟普通类没差别,而接口中的成员变量只能是static final型,因此必须初始化。

4>一个子类只能继承一个抽象类,而可以实现多个接口。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值