Java面试1

这篇博客主要涵盖了Java面试中常见的基础知识,包括逻辑运算符优先级、原码、反码、补码的解释,位运算符及其应用,数据类型转换规则,数组的操作,对象和类的相关概念,以及OOP的基本原理。内容详细解答了与或非的优先级,原码、反码和补码的含义,位运算符的理解,以及数组和对象类的各种问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、基本知识

1.与或非三个逻辑运算符的优先级是怎么排列的?

“非”优先级最高,”与”其次,”或”优先级最低

2.原码,反码,补码分别是什么意思?

·       原码:将数字转换为二进制,第一位为符号位,正数为0,负数为1

例如:12的原码是00001100 -12的原码是10001100

·       反码:正数的反码和原码相同,负数的反码将原码符号位之外的位逐位取反

例如:12的反码是00001100 -12的反码是11110011

·       补码:正数的补码和原码相同,负数的补码将反码加1

例如:12的补码是00001100 -12的补码是11110100

最后强调一点,计算机存储数据用补码形式来存储。

二、位运算及

1.位运算符都有哪些?

&与 |或 ^异或 ~非 >>右移 <<左移 >>>无符号右移

2.1<<35怎么理解?

1是int类型是32位(4字节),所以需要把35%32=3,事实上和执行1<<3等价

3.数据类型转换需要遵循什么原则?

小类型向大类型转换,是自动转换的,或者说隐式转换的

大类型向小类型转换,是需要强制转换的,或者说显式转换

    例如:

    byte b = 1;

    short s = b;//自动转换    

    b = (byte) s;//强制转换

4.byte b = 10这个语句是正确的,为什么10是int型比byte大还不需要强制转换呢?

因为在java中做了特殊处理,其中规定byte,short,char类型可以直接赋予int类型的直接量,

例如:

byte b = 10;

short s = 10;

char c = 10;

以上赋值语句都是正确的。

但是不能超出超出类型的范围(byte占1字节),例如以下赋值就是错误的:

byte b = 128;

如果超出范围,必须得作强制转换,例如以下语句是正确的:

byte b = (byte) 128;

需要强调的是,必须是int类型的直接量,以下语句就是错误的:

byte b = 10L;

10L不是int类型的直接量

5.byte b = (byte) 300;强制转换后的结果是44,是按照什么规律得出来的?

是先把300转换成二进制,然后根据byte类型的大小截取了后8位

300的补码是00000000 00000000 0000000100101100

b的结果是:00000000 00000000 00000001 00101100 结果为44

6.byte b = (byte) true;这个转换成立吗?

不成立,布尔值和数字是不兼容的,不能作任何转换。

7.int i = (int) “100″;这个转换成立吗?

不成立,引用类型和基本类型是不能直接强制转换的,需要用包装类的方法来转换。

8.char型和short型哪个比较大?

不能说哪个大,哪个小,这两个类型char的取值是从0~65535,而short类型的取值是-32768~32767,这个两个类型之间的转换都需要强制转换。

9.字符串是不是基本类型?

不是,String是java.lang包中的一个类,是引用类型的,8种基本类型中没有一个是String类型。

10.空字符串用什么来表示?

用“”(两个并列的双引号)表示,代表0个长度的字符串对象。

11.String s = “”;和String s = null;有什么区别?

第一个表示s被赋值,指向了一个字符串对象,第二个表示s没有指向任何对象实例,是真空

12.两个字符串用什么运算符可以连成一个字符串?

用+运算符,例如“abc” + “xyz”最后的结果就是”abcxyz“

13.数学运算符加法和字符串连接符都是+,怎么区分?

是通过运算符两边的操作数来判断的,如果两边的操作数都是数字型的基本类型,则进行数学运算,如果两边的操作数有一个是字符串,则把另一个操作数也转换为则进行字符串连接运算。

例如:

5 + 4 的结果是9

“5″ + 4的结果是54

14.判断字符串内容相同用什么方法?

用equals方法判断内容相同,==只能判断引用是否相同

15.提供用户输入使用哪个类

使用javav.util.Scanner类

16.if语句可以用if(-1)形式判断吗?

不可以,数字不能代替布尔值

17.if语句和循环语句的花括号什么时候可以省略?

当执行的语句只有一句的时候

18.switch语句有哪些规则?

表达式expr的返回值必须是下述几种类型之一:int, byte, char, short或枚举常量;

case子句中的值必须是常量,且所有case子句中的值应是不同的,也必须是下述几种类型之一:int, byte, char, short或枚举常量

default子句是任选的;

break语句用来在执行完一个case分支后使程序跳出switch语句块;

19.对于退出循环break和continue有什么区别?

break是退出整个循环

continue是退出当前循环继续下一次循环

三、数组

1.声明数组创建数组的方法?

以下声明都是合法的:

int [] a;

int a[];

String[] a;

以下创建数组对象都是合法的:

int[] a = new int[3];

int[] a = {1,2,3};

int[] a = new int[] {1,2,3};

2.int[] x和String[] s这两个数组对象,哪个是基本类型,哪个是引用类型?

两个都是数组对象,都是引用类型的

3.数组元素下标最小是多少,最大是多少,超出范围会怎么样?

最小是0,最大是数组元素个数减一,超出范围将会出现下标越界异常

4.得到数组长度用length属性还是length()方法?

是length属性,得到字符串长度才有length()方法

5.声明int[][] a = new int[3][],a是一个二维数组,a[0]本身是什么类型的?

二维数组的元素都是一维数组,a[0]是int[]类型的

6.数组的大小一经创建可不可以改变大小了?

不可以,数组是定长的,一经创建就不能再改变大小了

7.可以把2个int型,3个double型,4个String型的值放到一个数组中吗?

不可以,数组的元素类型必须是相同类型的。

8.java中的多维数组必须是要形成矩阵排列吗?

不一定,也可以是不规则的。

9.操作数组比较方便的实用类?

java.util.Arrays类提供了很多关于数组的实用方法

四、对象和类

1.OOP是什么意思?

Object Oriented Programming(面向对象编程)

2.类和对象的区别?

类:对象的蓝图,生成对象的模板,是对一类事物的描述,是抽象的概念上的定义

对象:对象是实际存在的该类事物的每个个体,因而也称为实例

3.类之间的3种关系?

依赖关系(uses-a)

聚集关系(has-a)

继承关系(is-a)

4.一个java源文件可以写多个类吗?

可以,但必须只能有一个公有类,并且文件名和公有类的类名相同。

5.类中有哪些成员?

有属性(数据域),方法,构造器(构造方法)

6.构造方法和普通方法的区别?

构造方法没有返回值,方法名必须和类名相同,需要用new语句调用构造方法。

7.普通方法可不可以也用类名作为方法名?

是可以的,因为调用普通方法的语法和调用构造器的语法不一样。

8.一个构造器调用另外一个构造器需要用什么语法?

用this()语法调用另外一个重载构造器,需要注意的是调用语句必须是构造器中的第一句

9.什么时候虚拟机会自动添加一个默认构造器?

当类中没有显式定义任何构造器的时候,虚拟机会自动添加一个无参的构造器

10.实例成员和静态成员的区别?

实例成员:是属于对象实例的,用对象.成员名称语法调用

静态成员:和对象实例无关,是属于类本身的,用类名.成员名称语法调用

11.静态初始化块statci{}的执行时机是什么时候?

在类被加载的时候,仅执行一次。

12.静态方法可不可以直接调用同一个类中的非静态成员?

不可以,静态方法不能直接调用一个非静态成员,需要用对象调用。

13.包是什么?

包实际上就是物理上的文件夹,可以把类放到不同的包中。

14.把一个类放到包中,需要在类中加上什么语句?

需要加上包声明package语句,必须写在源文件的第一句

15.什么时候需要导入类?用什么语句?

当使用的类和当前类并不在同一个包中的时候,用import语句导入。

16.默认包中的类可以导入吗?

不可以,不在默认包中的类无法使用默认包中的类。

17.java中哪个包中的类是自动导入的?

java.lang包

18.什么叫做完整类名?

顶层包名.子包名.类名

19.静态导入语句有什么作用?

在使用类中的静态成员的时候前面不需要加类名前缀。

20.局部变量和全局变量的区别?

区别

局部变量

全局变量

声明位置

方法或块内部

方法外类内部

访问权限修饰符

没有访问权限

有访问权限

默认值

没有默认值

有默认值

使用形式

直接使用

对象调用

作用域

在方法或语句块内部

整个类

生命周期

进入方法或语句块创建退出方法或语句块销毁

随着对象的创建而创建随着对象的销毁而销毁

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值