1.java中接口和抽象类的区别
2.抽象类和普通类的区别
1.抽象类不能被实例化。 2.抽象类可以有构造函数,被继承时子类必须继承父类一个构造方法,抽象方法不能被声明为静态。 3.抽象方法只需申明,而无需实现,抽象类中可以允许普通方法有主体 4.含有抽象方法的类必须申明为抽象类 5.抽象的子类必须实现抽象类中所有抽象方法,否则这个子类也是抽象类
3.抽象类是否可以有构造函数?
答案是可以有。抽象类的构造函数用来初始化抽象类的一些字段,而这一切都在抽象类的派生类实例化之前发生。不仅如此,抽线类的构造函数还有一种巧妙应用:就是在其内部实现子类必须执行的代码
4. 方法签名(what is method signature in Java?)
原意:Definition: Two of the components of a method declaration comprise the method signature—the method’s name and the parameter types.
方法声明的两个组件构成了方法签名 - 方法的名称和参数类型
案列实践:
public double calculateAnswer(double wingSpan, int numberOfEngines,
double length, double grossTons) {
//do the calculation here
}
该方法的签名为 calculateAnswer(double, int, double, double)
5.实例(找出该函数运行的结果)
public class Main{
public static void main(String[] args){
System.out.println(B.c);
}
}
class A{
public static String c = "C";
static{
System.out.println("A");
}
}
class B extends A {
static{
System.out.println("B");
}
}
结果:该结果为 A C
6.方法宗量
宗量(argument),可以理解为自变量,在计算机科学与技术中可能当成形式参数更好理解一些。
方法的接受者,在运行时可以理解为方法的实际执行者。
public class Book{
public void read(){
public static void doRead(Book b){
b.read();
}
}
}
类方法 Book.doRead(Book)
他的接收者就是 Book
这个类对象,他的参数 b
是一个形式参数。意思是在方法没被调用前,b 没有具体的值,就只是一个形式而已,相当于于一个占位符。再来看方法体:b.read()
,我们可以说b.read()
一定是指向Book#read
这个方法吗?也可以不严谨的说 read
的执行者 b
一定是 Book
对象吗?不行的,因为面向对象的多态性,父类的方法是可以被子类重写的。只有运行时,我们调用这个方法时才可以确定方法的接收者,比如 Book.doRead(new Magazine())
,在运行时实际指向的是 Magazine#read
。所以说方法的接收者是形式变量(宗量)。
6.注解(Annotation)
简介:Java注解(Annotation)又称为Java标注,是JDK5.0引入的一种注释机制
Java 语言中的类、方法、变量、参数和包等都可以被标注。和 Javadoc 不同,Java 标注可以通过反射获取标注内容。在编译器生成类文件时,标注可以被嵌入到字节码中。Java 虚拟机可以保留标注内容,在运行时可以获取到标注内容 。 当然它也支持自定义 Java 标注
7.Equals和==的区别
值类型是存储在内存中的栈中,而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。
==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。 equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
==比较的是2个对象的地址,而equals比较的是2个对象的内容。显然,当equals为true时,==不一定为true。
8.λ表达式(Java Lambda 表达式)
这里还是需要自己多试试这个函数的操作步骤。
https://www.runoob.com/java/java8-lambda-expressions.html
9.char可以存储汉字吗?
答案是可以的,char类型中存储的是Unicode编码,Unicode编码中是存在中文的,所以Char自然可以存储汉字,但是!仅限于Unicode中存在的汉字。一个汉字的占两个字节,一个Unicode也是占两个字节 ,char存储汉字完全没有问题。
10.Java序列化
定义:把对象转换为字节序列的过程称为对象的序列化。把字节序列恢复为对象的过程称为对象的反序列化。
对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中; 2) 在网络上传送对象的字节序列。
参考链接:https://www.cnblogs.com/xdp-gacl/p/3777987.html https://www.cnblogs.com/9dragon/p/10901448.html
11. try catch finally return的情况
①返回的数据为基本数据类型,则finally中对要返回数据操作无影响
import java.text.ParseException;
public class Test {
public static int num = 1;
public static void main(String[] args) throws ParseException {
int result;
result = num();
System.out.println(result);
}
private static int num() {
try{
int b = 4/0;
return num = num + 5;
}catch(RuntimeException exception){
return num = num + 10;
}finally {
System.out.println("不管你怎么样,我都是要执行");
}
}
}
/*
该代码执行结果为:不管你怎么样,我都是要执行 11
*/
②返回的数据为引用数据类型,finally中如果改变了返回对象的属性则影响结果,如果改变的是对象的引用则和基本数据类型一样不改变结果