- JDK与JRE的区别
JDK是Java开发工具,它不仅提供了Java程序运行所需的JRE,还提供了一些列的编译、运行等工具,如javac、java等。JRE只是Java程序的运行环境,它最核心的内容就是JVM(Java虚拟机) 及核心类库。
- 环境变量CLASSPATH的作用
保存的是一些目录和jar文件的地址,这些路径为Java程序在编译和运行的时候搜索类而用的。
- 动态的提供类加载路径命令
javac -cp D:\workspace\java\log4j.jar HelloWorld.java
java -cp D:\workspace\java\log4j.jar HelloWorld
此时,JVM就会把选项指定的jar文件作为CLASSPATH的一个部分
- Java和C++程序在编译和运行上有什么区别
C++源码编译以后,生成的是特定机器可以运行的文件,而Java源码经过编译后,生成的是中间的字节码文件,这些字节码是需要放在JVM中运行的,而JVM是有多个平台版本的。因此,Java具有跨平台性,而C++没有。
- 变量及其作用范围
变量根据生成周期的不同可以分为静态变量、成员变量、局部变量3种。静态变量生存周期由类决定,当类加载时,它们就生成并初始化。成员变量随着对象的加载生成并初始化,随着对象被垃圾回收机器回收而消失。局部变量随着方法的调用而创建,随着犯法的执行完毕而消失。
- Java装箱和拆箱
Java中的装箱和拆箱指的是基本数据类型和包装类型的自动相互转换,这个自动转换的过程是在编译阶段。
- equal和“==”
“==”运用在基本数据类型的时候,通过比较实际的值来判定是否相同;equal比较的是对象的内容是否相同。
- 类和对象的区别
Java的类通过class关键字进行定义,它代表了一种抽象的集合,例如,学生类、动物类等,在它的里面可以定义各种属性和方法,他们代表了每个类实例的特定的数据和动作。Java虚拟机对类只加载一次,对它的静态成员也只加载一次。对象指的是一个特定抽象的实例,它属于某一种类型。
- Java子类如何为父类传递参数
class Base {
int a ;
Base(int a){
this.a = a;
}
}
class Child extends Base {
Child(){
super(100);
}
Child(int a){
super(a);
}
}
new Child(100); //调用有参构造方法
new Child(); //调用无参构造方法
- 接口和抽象类的区别
1.都不能被实例化
2.接口里只能包含抽象方法,静态方法和默认方法,不能为普通方法提供方法实现,抽象类则完全可以包含普通方法。
3.接口里只能定义静态常量,不能定义普通成员变量,抽象类里则既可以定义普通成员变量,也可以定义静态常量。
4.接口不能包含构造器,抽象类可以包含构造器,抽象类里的构造器并不是用于创建对象,而是让其子类调用这些构造器来完成属于抽象类的初始化操作。
5.接口里不能包含初始化块,但抽象类里完全可以包含初始化块。
6.一个类最多只能有一个直接父类,包括抽象类,但一个类可以直接实现多个接口,通过实现多个接口可以弥补Java单继承不足。
- 内部类 :实现多重继承
内部类就像一只寄生虫,生存在其他类的内部。
根据内部类的定义结构的不同,可以把内部类分为两种:成员式和局部式。成员式内部类又可以分为:静态内部类和成员内部类。局部式又可以分为:普通局部内部类和匿名内部类。
1.静态内部类:在外部类加载的时候,静态内部类也随之加载,它的完整类名是abc.Outtter.Inner,编译后的class文件名为“Outter$Inner.class”.静态内部类无法访问外部类的非静态成员。
class Outter { //定义外部类Outter
static class Inner { //定义静态内部类Inner
...
}
}
2.成员内部类
class Outter { //定义外部类
class Inner { //定义成员内部类
...
}
}
3.局部内部类
public void adc(){ //成员方法
class MyLocal{ //定义局部内部类
... //局部内部类体
}
}
4.匿名内部类:如果一个局部内部类没有名字,则它就是匿名内部类
public void adc(){ //成员方法
new OneInterface(){ //直接new 一个接口
... //接口方法
}
}
- private、protected、public、default的区别
*不同包中,protected访问修饰时, 只有子类可以调用父类的方法,即继承机制,父类无法调用子类中的方法。
- 字符串字面量是否自动生成一个String对象
public class StringTest {
public static void mian (String[] args) {
String str1 = "abc";
String str2 = new String("abc");
}
}
JVM在执行这段代码的时候,遇到双引号操作符,它会自动创建一个String 对象。
- 字符串对象池的作用
String str1 = "hello";
String str2 = new String("hello");
这两种创建String 对象的方法有什么区别吗?区别就在于第一种方法在对象池中取对象,如果有就取现成的对象,如果没有,则在对象池中创建一个对象。第二种方法直接生成新的对象。
- String,StringBuffer,StringBuilder区别
1.运行速度方面: StringBuilder > StringBuffer > String
2.现成安全方面: StringBuffer 使用了synchronized,是线程安全的,StringBuilder是线程不安全的
3.使用场景:
String:适用于少量的字符串操作的情况
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况
- 如何使用指定的字符集创造String对象
String a = "中文";
String b = new String (a.getBytes(),"GBK");
String c = new String (a.getBytes(),"UTF-8");
String d = new String (a.getBytes(),"ISO-8859-1");
在编译的时候,JVM会把这些字符编码按照Unicode进行重新编码,然后保存在class文件中。
- new Object[5]语句是否创建了5个对象
答案为否,其实创建了一个数组示例,长度为5,每个数组元素的值均为null
- 集合框架
https://www.cnblogs.com/xiaoxi/p/6089984.html