1、如果类的方法没有返回值,该方法的返回值类型应当是abstract。()
正确答案:B
A 正确
B 错误
题解:
1、 没有返回值就是不返回任何东西 abstract肯定是错的了 void返回值为空 所以说的是构造函数吧
2、 选B,没有返回值,该方法的返回值类型为void
2、代码String str=”123456a”;int i=Integer.parseInt(str);会报异常的是()
正确答案:B
A java.lang.NullPoninterException
B java.lang.NumberFormatException
C java.lang.RuntimeException
D java.lang.ArrayindexOutOfBoundsException
题解:
1、非纯数字的字符串转化为Integer对象会报数字格式异常。
2、 java.lang.NullPoninterException:变量未被初始化、对象未赋值、对象为空(俗称的空指针异常) java.lang.NumberFormatException:数据格式转换失败(integer的取值范围为:-127-128,超过范围都会访问false) java.lang.RuntimeException:运行时异常 java.lang.ArrayindexOutOfBoundsException:数组下标越界
3、 parseInt 是将字符串参数解析为带符号的十进制整数。 字符串中的字符都必须是十进制数字,除了第一个字符可能是ASCII减号’-’ ( ‘\u002D’ )以指示负值或ASCII加号’+’ ( ‘\u002B’ )以指示正值。 返回所得到的整数值,就像参数和小数10被赋予parseInt(java.lang.String
4、 int)方法的参数一样。
3、以下哪个方法用于定义线程的执行体?
正确答案:C
A start()
B init()
C run()
D synchronized()
题解:
1、run()相当于线程的任务处理逻辑的入口方法,它由Java虚拟机在运行相应线程时直接调用,而不是由应用代码进行调用。 而start()的作用是启动相应的线程。启动一个线程实际是请求Java虚拟机运行相应的线程,而这个线程何时能够运行是由线程调度器决定的。start()调用结束并不表示相应线程已经开始运行,这个线程可能稍后运行,也可能永远也不会运行。
2、 run方法线程执行体.start方法开启多线程
3、 WCNBD!
4、在Java中,什么是Garbage Collection?()
正确答案:C
A 自动删除在程序中导入但未使用的任何包
B JVM检查任何Java程序的输出并删除任何没有意义的东西
C 当对象的所有引用都消失后,对象使用的内存将自动回收
D 操作系统定期删除系统上可用的所有java文件
题解:
1、 garbage collection 垃圾回收
5、判断对错。List,Set,Map都继承自继承Collection接口。
正确答案:B
A 对
B 错
题解:
Map是独立的接口,不继承Collection接口
6、关于下面程序,哪些描述是正确的: ( ) public class While {
public void loop() {
int x= 10;
while ( x ) {
System.out.print("x minus one is " + (x - 1));
x -= 1;
}
}
}
正确答案:B
A 行1有语法错误
B 行4有语法错误
C 行5有语法错误
D 行6有语法错误
E 行2有语法错误
Floop是关键字
G 程序能够正常编译和运行
题解:
1、这个题主要考while()中表达式的判断,在C语言中大于0的int值都会被认为是true,而java中没有这个机制,必须是boolean类型的。
2、 while()括号里参数必须是布尔类型,要么true要么false
3、 loop 不是java 的关键字 问题出在 wile( boolean ) x 是一个int 形的变量 不是Boolean 值 所有编译不通过
7、若有下列定义,下列哪个表达式返回false? String s = “hello”; String t = “hello”; char c = {‘h’,‘e’,‘l’,‘l’,‘o’} ;
正确答案:B
A s.equals(t);
B t.equals©;
C s==t;
D t.equals(new String(“hello”));
题解:
1、 看了一堆解析,不懂别乱说ok. 看底层源码 此处有判断这个参数是不是String的实例,不是不执行判断最后返回false,char数组是一种对象类型不是String类型的实例,直接跳过比较返回false
2、 选B。 A、D选项是对字符串内容的比较。JVM为了减少字符串对象的重复创建,其维护了一个特殊的内存,这段内存被成为字符串常量池。代码中出现字面量形式创建字符串对象时,JVM首先会对这个字面量进行检查,如果字符串常量池中存在相同内容的字符串对象的引用,则将这个引用返回,否则新的字符串对象被创建,然后将这个引用放入字符串常量池,并返回该引用。所以返回true。 C选项是引用地址的比较,同上也属于常量池的同一个字符串地址,所以相等返回true。
8、关于Java中参数传递的说法,哪个是错误的?
正确答案:D
A 在方法中,修改一个基础类型的参数不会影响原始参数值
B 在方法中,改变一个对象参数的引用不会影响到原始引用
C 在方法中,修改一个对象的属性会影响原始对象参数
D 在方法中,修改集合和Maps的元素不会影响原始集合参数
题解:
答案: D
解析: 注意!Java中方法的参数传递都是值传递
A. 在方法中,修改一个基础类型的参数不会影响原始参数值
public static void main(String []args){
int i = 5;
func(i);
System.out.println(i);
}
static void func(int j){
j = 10;
}
//输出结果
5
在主方法调用func(int j) 时 , 参数i是实际参数 , 值为5 , 参数j是形式参数 , 值是i给的 , 也是5 , i和j没有任何关系 , 是两个独立的参数 , 所以修改j的值时与i没有关系 , 仍然输出5。
B. 在方法中,改变一个对象参数的引用不会影响到原始引用
public static void main(String []args){
User rabbiter = new User();
rabbiter.setName(“rabbiter”);
func(rabbiter);
System.out.println(rabbiter.getName());
}
static void func(User user){
user = new User();
user.setName(“zhangsan”);
}
//输出结果
rabbiter
在主方法调用func(User user) 时 , 对象rabbiter保存的是一个地址值 , 本质上就是把rabbiter的地址值给了形参user , 所以此时实参rabbiter和形参user指向在堆中的同一个对象 , 他们的地址值相同 , 只是指向的对象一致 , 所以并不违反值传递的理论。
此时 , 如果修改形参user , new一个新的对象并让user指向它 , 修改的只是形参保存的地址 , 与实参rabbiter无关 , rabbiter指向的对象仍然是之前的那个对象。
C. 在方法中,修改一个对象的属性会影响原始对象参数
public static void main(String []args){
User rabbiter = new User();
rabbiter.setName(“rabbiter”);
func(rabbiter);
System.out.println(rabbiter.getName());
}
static void func(User user){
user.setName(“zhangsan”);
}
//输出结果
zhangsan
在主方法调用func(User user) 时 , 对象rabbiter保存的是一个地址值 , 本质上就是把rabbiter的地址值给了形参user , 所以此时实参rabbiter和形参user指向在堆中的同一个对象 , 他们的地址值相同 , 指向的对象一致 , 所以并不违反值传递的理论。
那么user对其指向的对象的属性name进行修改 , rabbiter指向的对象的name属性也就被修改了。
D. 在方法中,修改集合和Maps的元素不会影响原始集合参数
集合和Maps都是对象 , 所以此项跟C选项的解析一致。
9、下面有关JAVA异常类的描述,说法错误的是?
正确答案:D
A 异常的继承结构:基类为Throwable,Error和Exception继承Throwable,RuntimeException和IOException等继承Exception
B 非RuntimeException一般是外部错误(非Error),其一般被 try{}catch语句块所捕获
C Error类体系描述了Java运行系统中的内部错误以及资源耗尽的情形,Error不需要捕捉
D RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等,必须被 try{}catch语句块所捕获
题解:
1、运行时异常故名思议就是程序在运行的时候出现异常,隐含的一个前提就是程序在编译时是检测不到异常的存在,作者本人也并不知道是否自己的代码中含有运行时异常,所以根本也不可能提前使用try{}catch{}捕获.
2、 异常是指程序运行时(非编译)所发生的非正常情况或错误,当程序违反了语音规则,jvm就会将出现的错误表示一个异常抛出。 异常也是java 的对象,定义了基类 java。lang。throwable作为异常父类。 这些异常类又包括error和exception。两大类 error类异常主要是运行时逻辑错误导致,一个正确程序中是不应该出现error的。当出现error一般jvm会终止。 exception表示可恢复异常,包括检查异常和运行时异常。 检查异常是最常见异常比如 io异常sql异常,都发生在编译阶段。这类通过try、catch捕捉 而运行时异常,编译器没有强制对其进行捕捉和处理。一般都会把异常向上抛出,直到遇到处理代码位置,若没有处理块就会抛到最上层,多线程用thread。run()抛出,单线程用main()抛出。常见的运行异常包括 空指针异常 类型转换异常 数组月结异常 数组存储异常 缓冲区溢出异常 算术异常等
10、类之间存在以下几种常见的关系:
正确答案:ABC
A “USES-A”关系
B “HAS-A”关系
C “IS-A”关系
D “INHERIT-A”关系
题解:
1、 USES-A:依赖关系,A类会用到B类,这种关系具有偶然性,临时性。但B类的变化会影响A类。这种在代码中的体现为:A类方法中的参数包含了B类。 关联关系:A类会用到B类,这是一种强依赖关系,是长期的并非偶然。在代码中的表现为:A类的成员变量中含有B类。 HAS-A:聚合关系,拥有关系,是关联关系的一种特例,是整体和部分的关系。比如鸟群和鸟的关系是聚合关系,鸟群中每个部分都是鸟。 IS-A:表示继承。父类与子类,这个就不解释了。 要注意:还有一种关系:组合关系也是关联关系的一种特例,它体现一种contains-a的关系,这种关系比聚合更强,也称为强聚合。它同样体现整体与部分的关系,但这种整体和部分是不可分割的。
2、 use-a 是依赖关系 has-a 一般是组合关系 is-a 一般是继承关系
答案汇总:
1、正确答案:B
2、正确答案:B
3、正确答案:C
4、正确答案:C
5、正确答案:B
6、正确答案:B
7、正确答案:B
8、正确答案:D
9、正确答案:D
10、正确答案:ABC
以上部分题解来自牛客评论区,感谢评论区大佬的解释。