java三大特性
关于继承
关于覆盖/重写(@Override)
子类中的方法与父类中继承的方法有完全相同的返回值类型、方法名、参数个数以及参数类型,但子类丰富或修改了功能。
关于重载
重载是指在一个类中(包括父类)存在多个同名的不同方法,这些方法的参数个数,顺序以及类型不同均可以构成方法的重载。如果仅仅是修饰符、返回值、抛出的异常不同,那么这是两个相同的方法。
所以只有方法返回值不同是不能构成重载的
如:
public int add(int a, int b){}
public void add(int a, int b){}
在调用add方法的时候,系统并不知道你要调用哪一个。
子类与父类的相互转型
假设有两个类,Father是父类,Son是其子类。
子类对象转为父类,父类可以是接口。
Father f1 = new Son();
问题:在向上转型的过程中,我们容易出现方法丢失的问题,比如我们将一个导出类(子类)进行向上转型,但是在基类(父类)中可能缺少部分导出类(子类)的方法,所以我们对导出类(子类)进行向上转型之后,使用基类(父类)对象去调用方法,只能调用基类(父类)有的方法。
父类对象转为子类
Son s1 = (Son) f1;
注意:该父类必须实际指向了一个子类对象才可强制类型向下转型,看看下面的错误例子
Father f2 = new Father();
Son s2 = (Son)f2;
为什么Son s1 = (Son) f1;
可以转型而Son s2 = (Son)f2;
转型失败?
因为 f1 指向一个子类对象,但 f2 被传给了一个 Father 对象,这也就说明了该父类必须实际指向了一个子类对象才可强制类型向下转型
区别与联系:
Java语言的平台无关性是如何实现的?
java中通过abstract
来定义抽象类,通过interface
关键字来定义接口
抽象类和接口的主要区别可以总结如下:
数据类型 | 字节 | 位 |
---|---|---|
byte | 1 | 8 |
short | 2 | 16 |
int | 4 | 32 |
long | 8 | 64 |
float | 4 | 32 |
double | 8 | 64 |
char | 2 | 16 |
boolean | - | - |
注:boolean没有规定
注解的本质就是一个继承了 Annotation 接口的接口,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。程序可以通过反射获取标注内容。
注解的作用
代替繁杂的配置文件,简化开发。
定义注解
public @interface MyAnnotation {
String value();
int value1();
}
// 使用注解MyAnnotation,可以设置属性
@MyAnnotation(value1=100,value="hello")
public class MyClass {
}
从代码可以看出,定义注解使用的是@interface,可以在方法内部定义属性。
元注解
元注解的作用就是负责注解其他注解。Java中提供了4个元注解。
源码如下:
public @interface Target {
ElementType[] value();
}
public enum ElementType {
TYPE,FIELD,METHOD,PARAMETED,CONSTRUCTOR,LOCAL_VARIABLE,ANNOCATION_TYPE,PACKAGE,TYPE_PARAMETER,TYPE_USE
}
用例
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface MyAnnotation {
}
说明: 这表明MyAnnotation只能作用域类/接口和方法上。
源码如下:
public @interface Retention {
RetentionPolicy value();
}
public enum RetentionPolicy {
SOURCE, CLASS, RUNTIME
}
说明: SOURCE:表示在源文件中有效(即源文件保留);CLASS:表示在class文件中有效(即class保留);RUNTIME:表示在运行时有效(即运行时保留)
反射机制是指在运行中,对于任意一个类,都能够知道这个类的所有属性和方法。对于任意一个对象,都能够调用它的任意一个方法和属性。即动态获取信息和动态调用对象方法的功能称为反射机制。
(未完待续)
异常主要分为Exception和Error
Throwable 是 Java 语言中所有错误与异常的超类。Throwable 包含两个子类:Error(错误)和 Exception(异常),它们通常用于指示发生了异常情况。
Exception和Error有什么区别?
NoClassDefFoundError 和 ClassNotFoundException 区别?
捕获异常应该遵循哪些原则
java异常处理关键字
throw 和 throws 的区别是什么?
(未完待续)
(后续更新: 泛型、StringBuffer与StringBuilder、序列化与反序列化、==equalshashcode三剑客、静态与非静态)
原文:https://www.cnblogs.com/kylinxxx/p/13971792.html