导图社区 java
本图整理了java访问权限、 Java的数据类型、全局变量和局部变量的区别、实例变量的默认值、为啥要有包装类?自动装箱、自动拆箱的应用场景、Integer和Double类型判断相等内容。
编辑于2023-04-08 22:31:13 陕西JAVA
一个Java文件里可以有多个类吗(不含内部类)?
java访问权限
答案 Java语言为我们提供了三种访问修饰符,即private、protected、public,在使用这些修饰符修饰目标时,一共可以形成四种访问权限,即private、default、protected、public,注意在不加任何修饰符时为default访问权限。 在修饰成员变量/成员方法时,该成员的四种访问权限的含义如下: private:该成员可以被该类内部成员访问; default:该成员可以被该类内部成员访问,也可以被同一包下其他的类访问; protected:该成员可以被该类内部成员访问,也可以被同一包下其他的类访问,还可以被它的子类访问; public:该成员可以被任意包下,任意类的成员进行访问。 在修饰类时,该类只有两种访问权限,对应的访问权限的含义如下: default:该类可以被同一包下其他的类访问; public:该类可以被任意包下,任意的类所访问。
Java的数据类型
Java数据类型包括基本数据类型和引用数据类型两大类。 基本数据类型有8个,可以分为4个小类,分别是整数类型(byte/short/int/long)、浮点类型(float/double)、字符类型(char)、布尔类型(boolean)。其中,4个整数类型中,int类型最为常用。2个浮点类型中,double最为常用。另外,在这8个基本类型当中,除了布尔类型之外的其他7个类型,都可以看做是数字类型,它们相互之间可以进行类型转换。 引用类型就是对一个对象的引用,根据引用对象类型的不同,可以将引用类型分为3类,即数组、类、接口类型。引用类型本质上就是通过指针,指向堆中对象所持有的内存空间,只是Java语言不再沿用指针这个说法而已。 扩展阅读 对于基本数据类型,你需要了解每种类型所占据的内存空间,面试官可能会追问这类问题: byte:1字节(8位),数据范围是 -2^7 ~ 2^7-1。 short:2字节(16位),数据范围是 -2^15 ~ 2^15-1。 int:4字节(32位),数据范围是 -2^31 ~ 2^31-1。 long:8字节(64位),数据范围是 -2^63 ~ 2^63-1。 float:4字节(32位),数据范围大约是 -3.4*10^38 ~ 3.4*10^38。 double:8字节(64位),数据范围大约是 -1.8*10^308 ~ 1.8*10^308。 char:2字节(16位),数据范围是 \u0000 ~ \uffff。 boolean:Java规范没有明确的规定,不同的JVM有不同的实现机制。 对于引用数据类型,你需要了解JVM的内存分布情况,知道引用以及引用对象存放的位置,详见JVM部分的题目。
全局变量和局部变量的区别
Java中的变量分为成员变量和局部变量,它们的区别如下: 成员变量: 成员变量是在类的范围里定义的变量; 成员变量有默认初始值; 未被static修饰的成员变量也叫实例变量,它存储于对象所在的堆内存中,生命周期与对象相同; 被static修饰的成员变量也叫类变量,它存储于方法区中,生命周期与当前类相同。 局部变量: 局部变量是在方法里定义的变量; 局部变量没有默认初始值; 局部变量存储于栈内存中,作用的范围结束,变量空间会自动的释放。
实例变量的默认值
实例变量若为引用数据类型,其默认值一律为null。若为基本数据类型,其默认值如下: byte:0 short:0 int:0 long:0L float:0.0F double:0.0 char:'\u0000' boolean:false
为啥要有包装类?
Java语言是面向对象的语言,其设计理念是“一切皆对象”。但8种基本数据类型却出现了例外,它们不具备对象的特性。正是为了解决这个问题,Java为每个基本数据类型都定义了一个对应的引用类型,这就是包装类。 扩展阅读 Java之所以提供8种基本数据类型,主要是为了照顾程序员的传统习惯。这8种基本数据类型的确带来了一定的方便性,但在某些时候也会受到一些制约。比如,所有的引用类型的变量都继承于Object类,都可以当做Object类型的变量使用,但基本数据类型却不可以。如果某个方法需要Object类型的参数,但实际传入的值却是数字的话,就需要做特殊的处理了。有了包装类,这种问题就可以得以简化。
自动装箱、自动拆箱的应用场景
自动装箱、自动拆箱是JDK1.5提供的功能。 自动装箱:可以把一个基本类型的数据直接赋值给对应的包装类型; 自动拆箱:可以把一个包装类型的对象直接赋值给对应的基本类型; 通过自动装箱、自动拆箱功能,可以大大简化基本类型变量和包装类对象之间的转换过程。比如,某个方法的参数类型为包装类型,调用时我们所持有的数据却是基本类型的值,则可以不做任何特殊的处理,直接将这个基本类型的值传入给方法即可。
Integer和Double类型判断相等
Integer、Double不能直接进行比较,这包括: 不能用==进行直接比较,因为它们是不同的数据类型; 不能转为字符串进行比较,因为转为字符串后,浮点值带小数点,整数值不带,这样它们永远都不相等; 不能使用compareTo方法进行比较,虽然它们都有compareTo方法,但该方法只能对相同类型进行比较。 整数、浮点类型的包装类,都继承于Number类型,而Number类型分别定义了将数字转换为byte、short、int、long、float、double的方法。所以,可以将Integer、Double先转为转换为相同的基本数据类型(如double),然后使用==进行比较。
JAVA
一个Java文件里可以有多个类吗(不含内部类)?
java访问权限
答案 Java语言为我们提供了三种访问修饰符,即private、protected、public,在使用这些修饰符修饰目标时,一共可以形成四种访问权限,即private、default、protected、public,注意在不加任何修饰符时为default访问权限。 在修饰成员变量/成员方法时,该成员的四种访问权限的含义如下: private:该成员可以被该类内部成员访问; default:该成员可以被该类内部成员访问,也可以被同一包下其他的类访问; protected:该成员可以被该类内部成员访问,也可以被同一包下其他的类访问,还可以被它的子类访问; public:该成员可以被任意包下,任意类的成员进行访问。 在修饰类时,该类只有两种访问权限,对应的访问权限的含义如下: default:该类可以被同一包下其他的类访问; public:该类可以被任意包下,任意的类所访问。
Java的数据类型
Java数据类型包括基本数据类型和引用数据类型两大类。 基本数据类型有8个,可以分为4个小类,分别是整数类型(byte/short/int/long)、浮点类型(float/double)、字符类型(char)、布尔类型(boolean)。其中,4个整数类型中,int类型最为常用。2个浮点类型中,double最为常用。另外,在这8个基本类型当中,除了布尔类型之外的其他7个类型,都可以看做是数字类型,它们相互之间可以进行类型转换。 引用类型就是对一个对象的引用,根据引用对象类型的不同,可以将引用类型分为3类,即数组、类、接口类型。引用类型本质上就是通过指针,指向堆中对象所持有的内存空间,只是Java语言不再沿用指针这个说法而已。 扩展阅读 对于基本数据类型,你需要了解每种类型所占据的内存空间,面试官可能会追问这类问题: byte:1字节(8位),数据范围是 -2^7 ~ 2^7-1。 short:2字节(16位),数据范围是 -2^15 ~ 2^15-1。 int:4字节(32位),数据范围是 -2^31 ~ 2^31-1。 long:8字节(64位),数据范围是 -2^63 ~ 2^63-1。 float:4字节(32位),数据范围大约是 -3.4*10^38 ~ 3.4*10^38。 double:8字节(64位),数据范围大约是 -1.8*10^308 ~ 1.8*10^308。 char:2字节(16位),数据范围是 \u0000 ~ \uffff。 boolean:Java规范没有明确的规定,不同的JVM有不同的实现机制。 对于引用数据类型,你需要了解JVM的内存分布情况,知道引用以及引用对象存放的位置,详见JVM部分的题目。
全局变量和局部变量的区别
Java中的变量分为成员变量和局部变量,它们的区别如下: 成员变量: 成员变量是在类的范围里定义的变量; 成员变量有默认初始值; 未被static修饰的成员变量也叫实例变量,它存储于对象所在的堆内存中,生命周期与对象相同; 被static修饰的成员变量也叫类变量,它存储于方法区中,生命周期与当前类相同。 局部变量: 局部变量是在方法里定义的变量; 局部变量没有默认初始值; 局部变量存储于栈内存中,作用的范围结束,变量空间会自动的释放。
实例变量的默认值
实例变量若为引用数据类型,其默认值一律为null。若为基本数据类型,其默认值如下: byte:0 short:0 int:0 long:0L float:0.0F double:0.0 char:'\u0000' boolean:false
为啥要有包装类?
Java语言是面向对象的语言,其设计理念是“一切皆对象”。但8种基本数据类型却出现了例外,它们不具备对象的特性。正是为了解决这个问题,Java为每个基本数据类型都定义了一个对应的引用类型,这就是包装类。 扩展阅读 Java之所以提供8种基本数据类型,主要是为了照顾程序员的传统习惯。这8种基本数据类型的确带来了一定的方便性,但在某些时候也会受到一些制约。比如,所有的引用类型的变量都继承于Object类,都可以当做Object类型的变量使用,但基本数据类型却不可以。如果某个方法需要Object类型的参数,但实际传入的值却是数字的话,就需要做特殊的处理了。有了包装类,这种问题就可以得以简化。
自动装箱、自动拆箱的应用场景
自动装箱、自动拆箱是JDK1.5提供的功能。 自动装箱:可以把一个基本类型的数据直接赋值给对应的包装类型; 自动拆箱:可以把一个包装类型的对象直接赋值给对应的基本类型; 通过自动装箱、自动拆箱功能,可以大大简化基本类型变量和包装类对象之间的转换过程。比如,某个方法的参数类型为包装类型,调用时我们所持有的数据却是基本类型的值,则可以不做任何特殊的处理,直接将这个基本类型的值传入给方法即可。
Integer和Double类型判断相等
Integer、Double不能直接进行比较,这包括: 不能用==进行直接比较,因为它们是不同的数据类型; 不能转为字符串进行比较,因为转为字符串后,浮点值带小数点,整数值不带,这样它们永远都不相等; 不能使用compareTo方法进行比较,虽然它们都有compareTo方法,但该方法只能对相同类型进行比较。 整数、浮点类型的包装类,都继承于Number类型,而Number类型分别定义了将数字转换为byte、short、int、long、float、double的方法。所以,可以将Integer、Double先转为转换为相同的基本数据类型(如double),然后使用==进行比较。