java入门逻辑题_Java基础语法面试题50题整理(带答案)

0,3

1,可以有多个类,但只能有一个 public 的类,并且 public 的类名必须与文件名相一致。

2,java 中的保留字,现在没有在 java 中使用。

3,&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都 为 true 时,整个运算结果才为 true,否则,只要有一方为 false,则结果为 false。 &&还具有短路的功能,即如果第一个表达式为 false,则不再计算第二个表达式,

例如,对 于 if(str != null&& !str.equals(“”))表达式,当 str 为 null 时,后面的表达式不会执行,所以不 会出现 NullPointerException 如果将&&改为&,则会抛出 NullPointerException 异常。 If(x==33 &++y>0) y 会增长,If(x==33 && ++y>0)不会增长 &还可以用作位运算符,当&操作符两边的表达式不是 boolean 类型时,&表示按位与操作,

4,两种方法,标签加break ,外层的循环条件表达式的结果可以受到里 层循环体代码的控制

方法一

ok:for (int i = 0; i < 10; i++){for (int j = 0; j < 10; j++){if (j == 3) breakok;

}

}

方法二boolean boo = true;for (int i = 0; i < 10&&boo; i++){for (int j = 0; j < 10; j++){if (j == 3) {

boo=false;break;

}

}

}

5,①装箱:指将基本类型数据值转换成对应的封装对象,即将栈中的数据封装成对象存放到堆栈中;

②拆箱:拆箱是装箱的反过程,是封装的对象转换成基本类型的数据值,即将堆中的数据值存放到栈中的过程。

装箱:Integer integer = Integer.valueOf(12);

拆箱:inti = integer.intValue();

//jdk1.5之后自动调用Integer integer1 = 12;

inti1 = integer;

6,在 switch(expr1)中,jdk1.7以前,expr1只能是一个整数表达式或者枚举常量(更大字体),整数表达 式可以是 int 基本类型或 Integer 包装类型,由于,byte,short,char 都可以隐含转换为 int,所以,这些类型以及这些类型的包装类型也是可以的。显然,long 和 String 类型都不符合 switch 的语法规定,并且不能被隐式转换成 int 类型,所以,它们不能作用于 swtich 语句中。在jdk1.7后,整形,枚举类型,boolean,字符串都可以。

7,char 型变量是用来存储 Unicode 编码的字符的,unicode 编码字符集中包含了汉字,所以, char 型变量中当然可以存储汉字啦。:unicode 编 码占用两个字节,所以,char 类型的变量也是占用两个字节

8,数值型的初始值为0;布尔型的初始值为false;字符型的为‘\0’(字符串结束标识);引用类型的则为NULL(空引用)字符串String就属于引用类型;

9,2 << 3, 因为将一个数左移 n 位,就相当于乘以了2的 n 次方,那么,一个数乘以8只要将其左移3位 即可,而位运算 cpu 直接支持的,效 率最高,所以,2乘以8等於几的最效率的方法是2 << 3。

bc0012932619be6dfedcc8626cf6fbd4.png

10,

将字符串的值转换为基本类型的方法:

直接利用封装类的构造方法,即Xxx(String s)例:int num1=new Integer("12");

调用封装类提供的int num =Integer.paresXxx("123");

将基本类型的值转换为字符串:

直接使用一个空字符串来连接数值即可,String as=" "+as;

调用封装类提供的toString()静态方法,String as=Integer.toString( 100);

调用String类提供的valueOf()静态方法,String as=String.valueOf(45);

11,

==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存 储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作 符。

如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块 内存(堆内存),变量名也占用一块内存(java虚拟机栈),例如 Objet obj = new Object();变量 obj 是一个内存, new Object()是另一个内存,此时,变量 obj 所对应的内存中存储的数值就是对象占用的那 块内存的首地址。如果要比较两个变量是否指向同一个对象,这时候就需要用==操作符进行比较。

equals 方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相 同,它比较的两个对象是独立的。例如,对于下面的代码: String a=new String("foo"); String b=new String("foo"); 两条 new 语句创建了两个对象,然后用 a/b 这两个变量分别指向了其中一个对象,这是两 个不同的对象,它们的首地址是不同的,即 a 和 b 中存储的数值是不相同的,所以,表达 式 a==b 将返回 false,而这两个对象中的内容是相同的,所以,表达式 a.equals(b)将返回 true。

记住,字符串的比较基本上都 是使用 equals 方法。 如果一个类没有自己定义 equals 方法,那么它将继承 Object 类的 equals 方法,Object 类 的 equals 方法的实现代码如下: boolean equals(Object o){ return this==o; } 这说明,如果一个类没有自己定义 equals 方法,它默认的 equals 方法(从 Object类继承 的)就是使用==操作符,也是在比较两个变量指向的对象是否是同一对象,这时候使用 equals 和使用==会得到同样的结果,如果比较的是两个独立的对象则总返回 false。

12

使用 final 关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容 还是可以改变的。例如,对于如下语句:改变引用变量时报错。

13

,不可以。因为非 static 方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对 象上进行方法调用,而 static 方法调用时不需要创建对象,可以直接调用。也就是说,当一 个 static 方法被调用时,可能还没有创建任何实例对象,如果从一个 static 方法中发出对非 static 方法的调用,那个非 static 方法是关联到哪个对象上的呢?这个逻辑无法成立,所以, 一个 static 方法内部发出对非 static 方法的调用。

14,

false

true

装箱生成的对象,装箱动作通过valueOf实现的,整型池容纳-128—127之间的Integer对象,不在该范围的int类型通过new生成包装对象。即-128这个数字的包装每次都是同一个对象,而128不是同一个对象。整形池存在不仅提高了系统性能,节约内存空间。

15,

Math 类中提供了三个与取整有关的方法:ceil、floor、round,这些方法的作用与它们的英 文名称的含义相对应,例如,ceil 的英文意义是天花板,该方法就表示向上取整, Math.ceil(11.3)的结果为12,Math.ceil(-11.3)的结果是-11;floor 的英文意义是地板,该方法 就表示向下取整,Math.ceil(11.6)的结果为11,Math.ceil(-11.6)的结果是-12;最难掌握的是 round 方法,它表示“四舍五入”,算法为 Math.floor(x+0.5),即将原来的数字加上0.5后再向 下取整,所以,Math.round(11.5)的结果为12,Math.round(-11.5)的结果为-11。

16,

构造器 Constructor不能被继承,因此不能重写 Override ,但可以被重载 Overload 。

17

接口可以继承接口。抽象类可以实现(implements)接口,抽象类可以继承具体类。抽象类中 可以有静态的 main 方法

822a50128c94027d2bca3d19350fc19a.png

18,

Overload 是重载的意思,Override 是覆盖的意思,也就是重写。

重载 Overload 表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相 同(即参数个数或类型,顺序不同)

1、在使用重载时只能通过不同的参数样式。例如,不同的参数类型,不同的参数个数,不 同的参数顺序(当然,同一方法内的几个参数类型必须不一样,例如可以是 fun(int,float), 但是不能为 fun(int,int));

2、不能通过访问权限、返回类型、抛出的异常进行重载;

3、方法的异常类型和数目不会对重载造成影响;

4、对于继承来说,如果某一方法在父类中是访问权限是 priavte,那么就不能在子类对其进 行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。

重写 Override 表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子 类创建的实例对象调用这个方法时,将调用子类中的定义方法

1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;

2、覆盖的方法的返回值必须和被覆盖的方法的返回一致;

3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;

4、被覆盖的方法不能为 private,否则在其子类中只是新定义了一个方法,并没有对其进行 覆盖

19,

Stirng和StringBuffer,StringBulider都实现了charSequence接口,String为不可改变量,修改要么创建新的字符串对象,要么返回自己(str.substring(0)),StringBuffer是一个可变字符序列,他与String一样,在内存中的都是一个有序的字符序列,不同点是值可以改变,StringBuilder 与 StringBuffer在性能上基本相同,都为可变字符序列。不同点为StringBuffer为线程安全的,而StringBuilder为线程不安全。

使用场景:String:常量的声明,少量的变量运算。StringBuffer:频繁的字符串运算,多线程(xml,Http解析)。StringBuilder:频繁的字符串运算,单线程(SQL语句拼接)。

20,

10.0

21,A,  TT这道题我也不知为啥

22,true   false  false

23,B

24,AD

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值