Java-面试题

  • 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

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值