Java知识点梳理(一)

每当有些知识点记不清的时候,老是去网上搜,有时候还总觉得找的不是自己想要的东西,所以决定自己总结一点。


1. 基本类型:


boolean: true, false
byte: 8 bit
short: 16 bit
int: 32 bit
long: 64 bit
char: 16 bit
float: 32 bit
double: 64 bit


2. 创建对象:
当用new关键字创建某个类的实例时,附值符(=)右边的语句会给新实例分配内存并初始化该实例,然后附值符将新创建的对象的指引赋给左边的变量。

3. 默认初始化:

数值类型:0
布尔类型:false
对象类型(包括String):null

注意:上述只适用于object fields;对于局部变量,必须先初始化再引用。

4. 构造函数:
可以利用构造函数对对象进行初始化。

构造函数名字必须和类名相同;
没有返回值;
只要参数不同,构造函数可以有多个;
没有定义构造函数的情况下,java编译器会自动生成一个无参构造函数;
如果定义的构造函数中没有指明调用superclass的构造函数,Java编译器将自动加入对父类的无参构造函数super()作为第一句;
在有明确定义构造函数的情况下,不会再生成默认构造函数。

概念区分:无参构造函数和默认构造函数
默认构造函数是Java自动添加的一个无参的函数;无参构造函数是一个没有参数的构造函数,是因为某些需要而人为编写的。

建议:当一个类中有多个构造函数时,建议将它们有层次的写在一起,养成良好的Java编码风格。另外,构造函数之间也存在相互调用的情况,写在一起可以方便阅读。

注意:尽量保持构造函数简介,不要将初始化操作以外的代码也放在构造函数里,因为那样不便于debug和修改。

5. Object类
Object类(java.lang.Object)是所有类的父类。如果一个类没有指明继承的父类,它都是Object的直属子类,可以调用Object类的方法。例如,toString方法等。

6. 对象,继承和多态
Java支持多态,多态是面向对象编程中的关键概念之一。
当一个类型的对象可以有多个不同的行为,我们就可以称之为多态。一般表现在一个类的子类,可以赋给他的基类的变量。
eg:

Car auto = new Car();
auto.drive();
auto = new BMW();
auto.drive();

上面的例子中,BWM是Car的子类。变量auto在不同的时间点分别指向两个不同的Car类型的对象。drive()的行为将取决于基类或子类中的定义。这便是多态。

另外,Java支持类型转换。子类对象可以转化成父类类型,但父类对象不能转化成子类对象。这是多态中的类型保护。

7. Final和Static声明
final声明表示不可改变。classes,methods,fields,parameters还有local variables都可以是final。

当用final声明类时,表示该类不可以有子类。例如,String类就是final的。
当用final声明方法时,表示该方法不能被子类重写。适用于实现比较独立且不允许子类修改的方法。
当用final声明变量(field,parameter,local variable)时,表示变量只能被附值一次且附值后不能再被改变。

对于field,则意味着必须在声明时附值或在每个构造函数中附值,如果初始化失败,或尝试在别的地方附值都将会报error。
对于parameter,final意味着参数不能被附值(但是其值是有可能变化的,比如参数是一个对象的指引的情况)。
注意:Java中只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象引用的一个副本,指向同一个对象。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会变的。
对于final局部变量,必须进行一次附值,且只能有一次附值。


static表示全局或静态的意思,用来修饰成员变量和成员方法,也可以形成静态代码块。

(1) 被修饰的成员变量和成员方法独立于该类的任何实例。也就是说,它不依赖特定的实例,通过类名直接访问。与其不同的是,非静态成员变量和成员方法必须通过实例来访问。
(2) static修饰的方法是不能在其子类中被重写的。另外,在早期的Java实现中,static方法比非static方法快,开发者喜欢用static方法来实现代码的“优化”。但是Android采用Just-In-Time 编译的Dalvik,不再需要这种方法的“优化”。因此,一般很少会用static方法。

static和final一起用表示什么:

static final用来修饰成员变量和成员方法,可以简单的理解为“全局常量”。
对于变量,表示一旦附值就不可修改,并且通过类名可以访问。
对于方法,表示不可被重写,并且可以通过类名直接访问。

8. abstract抽象
abstract修饰的类是抽象类。抽象类无法实例话,即不能用new来创建一个实例。
abstract修饰的方法是抽象方法。抽象方法必须定义在抽象类中。抽象方法没有具体实现。

如果一个类包含有抽象方法,那这个类一定是抽象类。
如果某个类是抽象类,它可以含有具体方法。
如果子类继承了抽象类,那子类必须实现父类中的抽象方法,否则该子类也要声明成抽象类。

9. interface接口
Java不支持多继承,即一个类最多只能有一个父类。但现实中又时常需要用到多继承,Java引入接口的概念,来实现“多继承”。接口只做定义,不做实现。可以把接口想象成有很多抽象方法的抽象类。

(1) 接口中的成员变量默认都是public,static,final类型的(都可省略),必须被显示初始化,即接口中的成员变量都是常量(大写字母,单词间用下划线分开);
(2) 接口中的默认方法都是public,abstract类型的(都可省略),没有方法体,不能被实例化;
(3) 接口不能实现另一个接口,但是可以继承多个其他接口;
(4) 当类实现了某个接口时,它必须实现接口中的所有抽象方法,否则必须声明为抽象的;
(5) 两个类,不管他们是否属于同一个父类,只要他们存在相同的功能,就能从中抽象出一个接口类型(但是要抽象出新的抽象类却不那么容易);
(6) 接口有利于软件系统的维护与重构,对于两个系统,通过接口交互比通过抽象类交互要能获得更好的松耦合;
(7) 接口用于描述对外提供的服务,所以接口中的成员变量和方法都必须是public的,接口不涉及任何具体实例相关的细节,因此接口没有构造方法。

抽象和接口的比较:
— 相同点
(1) 都代表系统的抽象层。把引用变量声明为上层抽象类型可以提高两个系统之间的松耦合;
(2) 都不能被实例化;
(3) 都包含抽象方法。
— 不同点
(1) 抽象类中可以提供有具体实现的方法,而接口中不行。向抽象类中添加具体方法对抽象类进行扩展而不会影响其子类;因为接口中只有抽象方法,若添加抽象方法,会影响到所有实现类。
(2) 一个类最多只能继承一个抽象类,但是可以实现多个接口。

结论:接口是系统中最高层次的抽象类型,可以提高系统的松耦合;接口必须非常稳定,一旦制定就不允许随意更改,否则会对外面使用者和系统本身造成影响;抽象类可以用来定制系统中的扩展点,抽象类中的具体方法可以完成部分实现,并且具体方法不会对子类产生影响。

10. Exception
Java使用exception作为处理一些不正常情况的手段。通常这些情况都是error。通过使用异常,可以提高程序的健壮性。

Java异常类:

java.lang.Throwable
- java.lang.Error
- java.lang.Exception
  - java.lang.RuntimeException

(1) Throwable类是Java语言中所有异常的超类。Error和Exception是其子类。
(2) Error表示仅靠程序本身无法回复的严重错误。
(3) Exception指出了合理的应用程序想要捕获的条件,表示程序本身可以处理的异常。
(4) RuntimeException是Exception的子类,RuntimeException的子类被叫做unchecked exceptions,不需要声明。也就是说,即使没有try...catch语句捕获它,也没有throws声明抛出,还是会编译通过。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值