面试专题-Java基础

1.JDK . JRE . JVM 三者的关系

JDK 是 Java 的最小开发环境,它包含JRE+编译运行工具
JRE 是 Java 的最小运行环境,它包含JVM+系统类库
JVM 是 Java 虚拟机,是虚拟出来的一个系统,我们常说的hotsport是 JVM 的一种实现

2.在进行小数运算时候,可以使用 double 吗?

如果是对精度要求不高的时候可以使用double进行小数计算
如果是对精度要求高的时候则不能使用,如果使用 double 可能会丢失精度, 导致结果不正确(银行项目 我们可以使用JDK提供的BigDecimal进行计算)

3.什么是逻辑与短路与 (&和&&)?

逻辑与和短路与都是需要整个判断都为true的时候表达式为true
当某一个判断为false时候 逻辑与 会继续执行后续判断,短路与则不会再继续执行了.
(逻辑或和短路或者是如此)

4.switch…case 判断条件可以使用字符串类型吗 ?

在 jdk1.7 之前只能使用整型,在 jdk1.7 开始可以使用字符串类型

5.你能说明方法中 return 的用法吗?

这个方法无返回值时候, return用于结束方法;
这个方法有返回值时候, return用于结束方法并且返回值给调用方.

6.面向对象的三大特征

面向对象的三大特征: 封装 . 继承 . 多态
封装 我们把一些具有相同属性或行为的类抽取出来,就是封装
对类的封装, 就是封装对象的属性和行为
对方法的封装,封装的是具体的功能
继承 是为了代码的重用, Java中的继承是单继承,一旦继承了,子类就具有父类+子类的属性和行为
多态 我们声明一个父类型的引用指向子类型的对象,就是多态.多态的主要表现形式就是重写和重载.

7. 重写和重载有什么区别

重写发生在父子类中,方法名相同,参数列表不同;
重载发生在同一个类中,方法名称相同,参数列表不同;

8. 抽象类和接口有什么区别

接口只能包含常量和抽象方法,接口之间可以继承,接口可以被多实现
抽象类可以包含抽象方法,也可以包含非抽象方法,必须被继承

9.java中常用的循环方式有哪些,它们有什么区别

while 循环, do…while 循环, for循环
while循环可能一次都不执行
do…while循环至少会执行一次
for 循环也有可能一次都不执行, 但for循环是我们最常用的循环方式

10.break 和 continue 有什么区别

break 用于结束循环
continue 用于跳过本次循环,进入下一次循环

11.什么是嵌套循环? 如何跳出嵌套循环? 你觉得嵌套循环多了有什么样的问题?

嵌套循环 就是循环中套循环, 外层循环控制行,内层循环控制列,运行时候遵循外层循环走一次,内存循环走所有次;
当我们想要跳出整个循环嵌套的时候,可以使用outer: 标签来定义循环,使用break outer 跳出整个循环; 循环嵌套一般需要控制在3层以内,如果嵌套太多可读性不好,并且可能存在设计问题

12. 不写类的构造方法可以吗? 如果写了类的有参构造方法,还会有缺省构造方法吗?

不写类的构造方法, Java编译器默认会有缺省无参构造方法;
如果写了类的有参构造方法,不会生成缺省方法

13.类的构造器可以被重写吗? 那可以被重载吗?

类的构造器不可以被重写,但可以被重载.

14.基本类型"= = “号和引用类型” = ="有什么区别?那引用类型要判断内容是否相等要怎么办?

基本类型"= =“号是判断两个值是否相等;
引用类型”= ="号是判断两个对象在堆内存的地址是否相同;
如果引用类型需要判断内容是否相等,应该使用equals方法;(具体实现是底层重写了equals方法)

15. Java中的this 和 super 关键字

this代表的是指向对象本身的一个指针
super是发生在继承关系中的,代表的是指向父类对象的一个指针.

this.成员变量名 是访问本类的成员变量
super.成员变量名 是访问父类的成员变量

this.方法名 是访问本类的方法,我们再调用方法时候,可以不写this,编译器会自动生成一个隐式的this;
super.方法名 是访问父类的方法

this() 是访问的本类的构造方法
super() 是访问父类的构造方法,并且在初始化子类时,一定会先初始化父类,默认子类中的构造器会隐式的调用super() 方法.

16. Java中的final关键字

final关键字用于修饰变量. 方法. 类
被final修饰的变量, 不可以被重新赋值;
被final修饰的类不可被继承;
被final修饰的方法不能被重写.

17. Java中的static关键字

static修饰的变量称之为静态变量, 通过类名.变量来访问, 当所有对象数据都一样时候使用
static修饰的方法称之为静态方法, 通过类名.方法名来访问, 当方法的操作仅与参数有关而与对象无关时候使用
还有一种static静态块, 在被类加载时自动执行, 常常用于加载静态资源.

18. 什么是内部类,内部类分类有哪些

在 Java中,可以将一个类的定义放在另外一个类的定义内部,这就是内部类;
内部类可以分为四种:

成员内部类
成员内部类是最普通的内部类,它的定义为 位于另一个类的内部, 形如下面的形式:

class Circle {
    double radius = 0;
    public Circle(double radius) {
        this.radius = radius;
    }
    class Draw {     //内部类
        public void drawSahpe() {
            System.out.println("drawshape");
        }
    }
}

类Draw像是类Circle的一个成员,Circle成为内部类, 成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成员).
不过需要注意的是,当成员内部类拥有和外部类同名的成员变量或者方法时,会发生隐藏现象,即默认情况下访问的是成员内部类的成员,如果要访问外部类的同名成员,需要一下面的形式进行访问:
外部类.this.成员变量
外部类.this.成员方法
虽然成员内部类可以无条件的访问外部类的成员,而外部类想访问成员内部类的成员却不是那么随心所欲了.在外部类中如果要访问成员内部类的成员,必须先创建一个成员内部类的对象,再通过指向这个对象的引用来访问:

class Circle {
    private double radius = 0;
 
    public Circle(double radius) {
        this.radius = radius;
        getDrawInstance().drawSahpe();   //必须先创建成员内部类的对象,再进行访问
    }
     
    private Draw getDrawInstance() {
        return new Draw();
    }
     
    class Draw {     //内部类
        public void drawSahpe() {
            System.out.println(radius);  //外部类的private成员
        }
    }
}

成员内部类是依附外部类存在的,也就是说,如果要创建成员内部类的对象,前提是必须存在一个外部类的对象.
内部类可以拥有private访问权限,protected访问权限, public访问权限及包访问权限
如果成员内部类Inner用private修饰,则只能在外部类的内部访问,如果用public修饰,则任何地方都能访问;
如果用protected修饰,则只能在同一个包下或者继承外部类的情况下访问;
如果是默认访问权限,则只能在同一个包下访问.
这一点和外部类有一点不一样,外部类只能被public和包访问两种权限修饰.
局部内部类
局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内
注意: 局部内部类就像是方法里面的一个局部变量一样,是不能有public,protected,private以及static修饰符

class People{
    public People() {
         
    }
}
 
class Man{
    public Man(){
         
    }
     
    public People getWoman(){
        class Woman extends People{   //局部内部类
            int age =0;
        }
        return new Woman();
    }
}

匿名内部类
静态内部类
静态内部类也是定义在另一个类里面的类,只不过在类的面前多了一个关键字static
静态类不需要依赖于外部类,并且他不能使用外部类的非static成员变量或者方法

public class Test {
    public static void main(String[] args)  {
        Outter.Inner inner = new Outter.Inner();
    }
}
 
class Outter {
    public Outter() {
         
    }
     
    static class Inner {
        public Inner() {
             
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值