Java基础(1)

  1. 为什么java代码可以实现一次编写,到处运行?

Java虚拟机(JVM)是Java跨平台的关键。在程序运行前,Java源代码(.Java)通过编译器编译成字节码(.class)。在程序运行时,JVM负责将字节码翻译成特定平台下的机器码并运行。

跨平台的是Java程序,不是JVM,JVM是用C/C++开发的软件,平台不同需要安装的版本也不同。

  1. 一个Java文件可以有多个类吗(不包含内部类)?

一个Java文件里可以有多个类,但是最多只能有一个被public修饰的类;
如果这个Java文件包含public修饰的类,则这个类的名称必须和Java文件名一致。

Java内部类有成员内部类、静态内部类、方法内部类、匿名内部类。

  • 成员内部类:成员内部类的创建需要依赖外部类对象,成员方法必须通过对象调用,并且内部类和外部类相互独立。
  • 静态内部类:定义在外部类的内部,使用static修饰,类比静态方法,静态内部类不需要外部类对象产生就能使用,不能访问外部类的成员域,但能访问静态域。
  • 方法内部类:定义在方法内部(类比于局部变量)
  • 匿名内部类:继承一个抽象类或者接口,没有构造方法。
//匿名内部类
interface IMessage {
    void fun();
}

public class noNameClass {
    public static void main(String[] args) {
        IMessage iMessage = new IMessage() {
            @Override
            public void fun() {
                System.out.println("hello");
            }
        };
        iMessage.fun();
    }
}
  1. Java访问权限的相关内容?

Java提供了三种访问修饰符,private、protected、public,使用时可以形成4种访问权限,即private、default、protected、public,在不加任何修饰符时是default访问权限。

  • 修饰成员变量和成员方法时:
    private:该成员可以被类内部成员访问。
    default:该成员可以被该类内部成员访问,也可以被同一包下其它类访问。
    protected:该成员可以被该类内部成员访问,也可以被同一包下其它类访问,还可以被它的子类访问。
    public:该成员可以被任意包下,任意类访问。
  • 修饰类时,该类只有两种访问权限,对应访问权限含义如下:
    default:该类可以被同一包下其它类访问。
    public:该类可以被任意包下,任意类访问。
  1. 介绍一下Java的数据类型?

Java数据类型包括基本数据类型和引用数据类型两大类。
基本数据类型有8个,整数类型(byte/short/int/long)、浮点类型(float/double)、字符类型(char)、布尔类型(boolean)。这八个类型中,除了boolean类型之外其它7个类型都可以看作数字类型,他们之间可以进行类型转换。
引用类型是对一个对象的引用,根据引用对象类型不同,从引用对象来进行分类可以将引用类型分为三类,即数组、类、接口类型。引用类型本质就是通过指针,指向堆中对象所持有的内存空间。

引用类型有4类:

  • 强引用:Java中的引用默认就是强引用,任何一个对象的赋值操作就产生了对这个对象的强引用。强引用的特性就是只要强引用存在,被引用的对象就不会被垃圾回收。
  • 软引用:软引用只有在内存不足的情况下,被引用的对象才会被回收。
  • 弱引用:弱引用引用的对象只要垃圾回收执行就会被回收,不管是否内存不足。
  • 虚引用:跟踪对象被垃圾回收的状态,确保一种对象被回收之后做某些事情的机制。

在这里插入图片描述

  1. 请介绍全局变量和局部变量的区别?

Java中的变量是分为成员变量和局部变量(Java没有真正的全局变量,这是出于其它语言的习惯说成的全局变量),区别如下:

成员变量:

  • 成员变量是在类的范围里定义的变量
  • 成员变量有默认的初始值
  • 未被static修饰的成员变量也叫实例变量,它存储于对象所在的堆内存中,生命周期与对象相同
  • 被static修饰的成员变量也叫类变量,它存储于方法区中,生命周期与当前类相同

局部变量:

  • 局部变量是在方法里定义的变量
  • 局部变量没有默认的初始值
  • 局部变量存储在栈内存中,作用的范围结束,变量空间会自动释放
  1. 请介绍一下实例变量的默认值?

实例变量若为引用数据类型,其默认值一律为null。若为基本数据类型,其默认值如下:
在这里插入图片描述

上述默认规则适用于所有成员变量,所以对于类变量(static修饰的成员变量)也是适用的。

  1. 为啥要有包装类?

Java语言是面向对象的语言,其设计理念是一切皆对象。但是八种基本数据类型不具备对象的特性。为了解决这个问题,Java为每个基本数据类型定义了一个对应的引用类型,这就是包装类。

  1. 说一说自动装箱、自动拆箱的应用场景?
  • 自动装箱可以把基本数据类型的数据直接赋值给对应的包装类型
  • 自动拆箱可以把一个包装类型的对象直接赋值给对应的基本类型

通过自动装箱、自动拆箱功能,可以简化基本数据类型变量和包装类对象之间的转换过程。

  1. 如何对Integer和Double类型判断相等?

Integer、Double不能直接进行比较,这包括:

  • 不能用==进行直接比较,因为它们是不同的数据类型
  • 不能转为字符串进行比较,因为转为字符串后,浮点值带小数点,整数值不带,这样它们永远不相等
  • 不能使用compareTo方法进行比较,虽然它们都有compareTo方法,但该方法只能对相同类型进行比较

正解:整数、浮点类型的包装类都继承于Number类型,而Number类型分别定义了将数字类型转换为byte、short、int、long、float、double的方法。所以,可以将Integer、Double先转换为相同的基本数据类型(double),然后使用==进行比较。

  1. int和Integer有什么区别,两者在做==运算时会得到什么结果?

int是基本数据类型,Integer是int的包装类。两者在做==运算时,Integer会自动拆箱为int类型,然后再进行比较。如果两个int值相等则返回true,否则返回false。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值