答案在最后
1、不考虑反射机制,一个子类显式调用父类的构造器必须用super关键字。( )【单选】
- A、正确
- B、错误
2、下面有关JDK中的包和他们的基本功能,描述错误的是?【单选】
- A、java.awt: 包含构成抽象窗口工具集的多个类,用来构建和管理应用程序的图形用户界面
- B、java.io: 包含提供多种输出输入功能的类
- C、java.lang: 包含执行与网络有关的类,如URL,SCOKET,SEVERSOCKET
- D、java.util: 包含一些实用性的类
3、下列修饰符中与访问控制权限无关的是?( )【单选】
- A、 private
- B、 public
- C、 protected
- D、 final
4、StringBuffer类对象创建之后可以再修改和变动.【单选】
- A、 正确
- B、 错误
5、下列表述错误的是?()【单选】
-
A、 int是基本类型,直接存数值,Integer是对象,用一个引用指向这个对象。
-
B、 在子类构造方法中使用super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行,否则编译不通过
-
C、 封装的主要作用在于对外隐藏内部实现细节,可以增强程序的安全性
-
D、 final是java中的修饰符,可以修饰类、接口、抽象类、方法和属性。
6、以下代码的循环次数是【单选】
public class Test {
public static void main(String args[]) {
int i = 7;
do {
System.out.println(--i);
--i;
} while (i != 0);
System.out.println(i);
}
}
- A、 0
- B、 1
- C、 7
- D、 无限次
7、假设 A 类有如下定义,设 a 是 A 类的一个实例,下列语句调用哪个是错误的?()【单选】
public class A
{
public int i;
static String s;
void method1(){}
static void method2(){}
}
- A、
System.out.println(a.i);
- B、
a.method1();
- C、
A.method1();
- D、
A.method2();
8、关于下面程序 ThisTest .java 运行结果 说法正确的是 : ( )【单选】
public class ThisTest {
public static void main(String args[]) {
String x="7";
int y = 2;
int z=2;
System.out.println(x+y+z);
}
}
- A、 11
- B、 722
- C、 22
- D、 程序有编译错误
9、能单独和finally语句一起使用的块是( )【单选】
- A、 try
- B、 catch
- C、 throw
- D、 throws
10、以下java程序代码,执行后的结果是()【单选】
public class Test {
public static void main(String[] args) {
Object o = new Object() {
public boolean equals(Object obj) {
return true;
}
};
System.out.println(o.equals("Fred"));
}
}
- A、 Fred
- B、 true
- C、 编译错误
- D、 运行时抛出异常
11、事务隔离级别是由谁实现的?【单选】
- A、 Java应用程序
- B、 Hibernate
- C、 数据库系统
- D、 JDBC驱动程序
12、下列说法正确的是( )【单选】
- A、 volatile,synchronized,都可以修改变量,方法以及代码块
- B、 volatile,synchronized 在多线程中都会存在阻塞问题
- C、 volatile能保证数据的可见性,但不能完全保证数据的原子性,synchronized即保证了数据的可见性也保证了原子性
- D、 volatile解决的是变量在多个线程之间的可见性、原子性,而sychroized解决的是多个线程之间访问资源的同步性
13、如果一个list初始化为{5,3,1},执行以下代码后,其结果为()?【单选】
nums.add(6);
nums.add(0,4);
nums.remove(1);
- A、 [5, 3, 1, 6]
- B、 [4, 3, 1, 6]
- C、 [4, 3, 6]
- D、 [5, 3, 6]
14、When is the text “Hi there” displayed?【单选】
public class StaticTest
{
static
{
System.out.println("Hi there");
}
public void print()
{
System.out.println("Hello");
}
public static void main(String args[])
{
StaticTest st1 = new StaticTest();
st1.print();
StaticTest st2 = new StaticTest();
st2.print();
}
}
- A、 Never.
- B、 Each time a new object of type StaticTest is created.
- C、 Once when the class is loaded into the Java virtual machine.
- D、 Only when the main() method is executed.
15、关于继承和实现说法正确的 是 ? ( )【单选】
- A、 类可以实现多个接口,接口可以继承(或扩展)多个接口
- B、 类可以实现多个接口,接口不能继承(或扩展)多个接口
- C、 类和接口都可以实现多个接口
- D、 类和接口都不可以实现多个接口
16、关于以下程序代码的说明正确的【单选】
class HasStatic{
private static int x = 100;
public static void main(String args[ ]){
HasStatic hs1 = new HasStatic();
hs1.x++;
HasStatic hs2 = new HasStatic();
hs2.x++;
hs1=new HasStatic();
hs1.x++;
HasStatic.x--;
System.out.println( "x=" +x);
}
}
- A、 5行不能通过编译,因为引用了私有静态变量
- B、 10行不能通过编译,因为x是私有静态变量
- C、 程序通过编译,输出结果为:x=103
- D、 程序通过编译,输出结果为:x=102
17、下面有关JAVA异常类的描述,说法错误的是?【单选】
- A、 异常的继承结构:基类为Throwable,Error和Exception继承Throwable,RuntimeException和IOException等继承Exception
- B、 非RuntimeException一般是外部错误(非Error),其一般被 try{}catch语句块所捕获
- C、 Error类体系描述了Java运行系统中的内部错误以及资源耗尽的情形,Error不需要捕捉
- D、 RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等,必须被 try{}catch语句块所捕获
18、非抽象类实现接口后,必须实现接口中的所有抽象方法,除了abstract外,方法头必须完全一致.【单选】
- A、 正确
- B、 错误
19、关于 Socket 通信编程,以下描述正确的是:( )【单选】
- A、 客户端通过new ServerSocket()创建TCP连接对象
- B、 客户端通过TCP连接对象调用accept()方法创建通信的Socket对象
- C、 客户端通过new Socket()方法创建通信的Socket对象
- D、 服务器端通过new ServerSocket()创建通信的Socket对象
20、下面有关servlet service描述错误的是?【单选】
- A、 不管是post还是get方法提交过来的连接,都会在service中处理
- B、 doGet/doPost 则是在 javax.servlet.GenericServlet 中实现的
- C、 service()是在javax.servlet.Servlet接口中定义的
- D、 service判断请求类型,决定是调用doGet还是doPost方法
21、下列哪个说法是正确的()【单选】
- A、 ConcurrentHashMap使用synchronized关键字保证线程安全
- B、 HashMap实现了Collction接口
- C、 Array.asList方法返回java.util.ArrayList对象
- D、 SimpleDateFormat是线程不安全的
22、DBMS 中实现事务持久性的子系统是()【单选】
- A、 安全性管理子系统
- B、 完整性管理子系统
- C、 并发控制子系统
- D、 恢复管理子系统
23、对于JVM内存配置参数:【单选】
-Xmx10240m -Xms10240m -Xmn5120m -XXSurvivorRatio=3
其最小内存值和Survivor区总大小分别是()
- A、 5120m,1024m
- B、 5120m,2048m
- C、 10240m,1024m
- D、 10240m,2048m
24、下列关于JAVA多线程的叙述正确的是()【不定项选择题】
- A、 调用start()方法和run()都可以启动一个线程
- B、 CyclicBarrier和CountDownLatch都可以让一组线程等待其他线程
- C、 Callable类的call()方法可以返回值和抛出异常
- D、 新建的线程调用start()方法就能立即进行运行状态
25、下列哪个是合法的 Java 标识符?( )【不定项选择题】
- A、 Tree&Glasses
- B、 FirstJavaApplet
- C、 First_Applet
- D、 273.5
26、jdk1.8版本之前的前提下,接口和抽象类描述正确的有( )【不定项选择题】
- A、 抽象类没有构造函数
- B、 接口没有构造函数
- C、 抽象类不允许多继承
- D、 接口中的方法可以有方法体
27、以下哪种JAVA的变量表达式使得变量a和变量b具有相同的内存引用地址( )【不定项选择题】
- A、 String a = “hello”; String b = “hello”;
- B、 Integer a; Integer b = a;
- C、 int a = 1; Integer b = new Integer(1);
- D、 int a = 1; Integer b = 1;
28、Java是一门支持反射的语言,基于反射为Java提供了丰富的动态性支持,下面关于Java反射的描述,哪些是错误的:( )【不定项选择题】
-
A、 Java反射主要涉及的类如Class, Method, Filed,等,他们都在java.lang.reflet包下
-
B、 通过反射可以动态的实现一个接口,形成一个新的类,并可以用这个类创建对象,调用对象方法
-
C、 通过反射,可以突破Java语言提供的对象成员、类成员的保护机制,
访问一般方式不能访问的成员 -
D、 Java反射机制提供了字节码修改的技术,可以动态的修剪一个类
-
E、 Java的反射机制会给内存带来额外的开销。
例如对永生堆的要求比不通过反射要求的更多 -
F、 Java反射机制一般会带来效率问题,
效率问题主要发生在查找类的方法和字段对象,
因此通过缓存需要反射类的字段和方法就能达到与之间调用类的方法和访问类的字段一样的效率
29、下面哪些赋值语句是正确的()【不定项选择题】
- A、 long test=012
- B、 float f=-412
- C、 int other =(int)true
- D、 double d=0x12345678
- E、 byte b=128
30、以下语句返回值为 true 的是()【不定项选择题】
- A、 a1==a2
- B、 d1==d2
- C、 b1==b2
- D、 c1==c2
答案
1、不考虑反射机制,一个子类显式调用父类的构造器必须用super关键字。( )
正确答案: A
正确
错误
解析:
题目中说的是子类显示调用父类中的构造方法必须使用super关键字;
如果子类没有显示调用父类中的构造方法,
则系统默认会调用父类中的无参构造方法;
若此时父类中没有定义无参构造方法则会报错。
2、下面有关JDK中的包和他们的基本功能,描述错误的是?
正确答案: C
A、java.awt: 包含构成抽象窗口工具集的多个类,用来构建和管理应用程序的图形用户界面
B、java.io: 包含提供多种输出输入功能的类
C、java.lang: 包含执行与网络有关的类,如URL,SCOKET,SEVERSOCKET
D、java.util: 包含一些实用性的类
解析:
-
java.awt:提供了绘图和图像类,主要用于编写GUI程序,包括按钮、标签等常用组件以及相应的事件类。
-
java.lang:java的语言包,是核心包,默认导入到用户程序,包中有object类,数据类型包装类,数学类,字符串类,系统和运行时类,操作类,线程类,错误和异常处理类,过程类。
-
java.io:包含提供多种输出输入功能的类。
-
java.net: 包含执行与网络有关的类,如URL,SCOKET,SEVERSOCKET等。
-
java.applet:包含java小应用程序的类。
-
java.util:包含集合框架、遗留的 collection 类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组、日期Date类、堆栈Stack类、向量Vector类等)。集合类、时间处理模式、日期时间工具等各类常用工具包。
-
java.sql:提供使用 JavaTM 编程语言访问并处理存储在数据源(通常是一个关系数据库)中的数据的 API。
3、下列修饰符中与访问控制权限无关的是?( )
正确答案: D
A、private
B、public
C、protected
D、final
解析:
java常见修饰符
权限修饰符:
private : 修饰私有变量
默认修饰符default(不用把default写出来): 比private限制更少,但比protected限制更多
protected: 修饰受保护变量
public : 修饰公有变量
状态修饰符:
final 最终变量(final修饰类,该类不能被继承,final修饰方法,该方法不能被重写,final修饰变量,该变量不能被重新赋值(相当于常量))
static 静态变量(随着类的加载而加载,优先于对象存在,被所有对象所共享,可以通过类名调用)
抽象修饰符:
abstract 抽象类&抽象方法(抽象类不能被实例化,抽象类中不一定有抽象方法,但有抽象方法的类必须定义为抽象类)
4、StringBuffer类对象创建之后可以再修改和变动.
正确答案: A
A、正确
B、错误
解析:
String,StringBuffer,StringBuilder,都实现了CharSequence接口。
String是个不可继承类(final修饰),也是个不可变类(内部char数组被final修饰)。
StringBuffer和StringBuilder内部都是一般的动态数组,所以可变。前者是线程安全的,因为方法基本都被synchronized修饰了。
5、下列表述错误的是?()
正确答案: D
A、int是基本类型,直接存数值,Integer是对象,用一个引用指向这个对象。
B、在子类构造方法中使用super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行,否则编译不通过
C、封装的主要作用在于对外隐藏内部实现细节,可以增强程序的安全性
D、final是java中的修饰符,可以修饰类、接口、抽象类、方法和属性。
解析:
final关键字
final修饰符,可以修饰类,方法,变量,不能修饰接口
final修饰的类不可以被继承
final修饰的方法不可以被覆盖
final修饰的变量为常量。只能赋值一次
一般final化的成员变量也会静态化
6、以下代码的循环次数是
public class Test {
public static void main(String args[]) {
int i = 7;
do {
System.out.println(--i);
--i;
} while (i != 0);
System.out.println(i);
}
}
正确答案: D
0
1
7
无限次
解析:
单独的–i和i–没有区别,但是在表达式中,–i会先进行自减再执行语句,而i–是先执行语句再进行自减,这一题每次循环执行输出语句时i自减1,执行–i时再次自减1,每次循环减2,总值为7,第四次执行循环时,i=-1,不等于0,所以会无限循环
7、假设 A 类有如下定义,设 a 是 A 类的一个实例,下列语句调用哪个是错误的?()
public class A
{
public int i;
static String s;
void method1(){}
static void method2(){}
}
正确答案: C
A、System.out.println(a.i);
B、a.method1();
C、A.method1();
D、A.method2();
静态成员和静态方法,可以直接通过类名进行调用;其他的成员和方法则需要进行实例化成对象之后,通过对象来调用。
static修饰的成员变量和方法,既可以通过类调用也可以通过实例(也就是对象)。 无static修饰的只能通过实例(也就是对象)调用
类名无法直接调用非静态方法
8、关于下面程序 ThisTest .java 运行结果 说法正确的是 : ( )
public class ThisTest {
public static void main(String args[]) {
String x="7";
int y = 2;
int z=2;
System.out.println(x+y+z);
}
}
正确答案: B
11
722
22
程序有编译错误
解析:
9、能单独和finally语句一起使用的块是( )
正确答案: A
A、try
B、catch
C、throw
D、throws
解析:
try{
}catch(){
}finally{
}
finally不管是否有异常都会执行,而且,try可以和catch和finally中的一个搭配使用,但是catch和finally不能单独使用
10、以下java程序代码,执行后的结果是()
public class Test {
public static void main(String[] args) {
Object o = new Object() {
public boolean equals(Object obj) {
return true;
}
};
System.out.println(o.equals("Fred"));
}
}
正确答案: B
A、Fred
B、true
C、编译错误
D、运行时抛出异常
11、事务隔离级别是由谁实现的?
正确答案: C
A、Java应用程序
B、Hibernate
C、数据库系统
D、JDBC驱动程序
解析:
数据库事务的隔离级别有4个,由低到高依次为Read uncommitted、Read committed、Repeatable read、Serializable,这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。
12、下列说法正确的是( )
正确答案: C
A、volatile,synchronized
都可以修改变量,方法以及代码块
B、volatile,synchronized 在多线程中都会存在阻塞问题
C、volatile能保证数据的可见性,但不能完全保证数据的原子性,synchronized即保证了数据的可见性也保证了原子性
D、volatile解决的是变量在多个线程之间的可见性、原子性,而sychroized解决的是多个线程之间访问资源的同步性
解析:
关键字volatile是线程同步的轻量级实现,所以volatile性能肯定比synchronized要好,并且只能修改变量,而synchronized可以修饰方法,以及代码块。
多线程访问volatile不会发生阻塞,而synchronized会出现阻塞
volatile能保证数据的可见性,但不能保证原子性;而synchronized可以保证原子性,也可以间接保证可见性,因为它会将私有内存和公共内存中的数据做同步
关键字volatile解决的下变量在多线程之间的可见性;而synchronized解决的是多线程之间资源同步问题
13、如果一个list初始化为{5,3,1},执行以下代码后,其结果为()?
nums.add(6);
nums.add(0,4);
nums.remove(1);
正确答案: B
A、[5, 3, 1, 6]
B、[4, 3, 1, 6]
C、[4, 3, 6]
D、[5, 3, 6]
答案B
解析如下:
nums.add(6);//把6添加到list中,变为{5,3,1,6}
nums.add(0,4);//在list的第0个位置添加4,list变为{4,5,3,1,6}
nums.remove(1);//移除list的第一个元素,list变为{4,3,1,6}
14、When is the text “Hi there” displayed?
public class StaticTest
{
static
{
System.out.println("Hi there");
}
public void print()
{
System.out.println("Hello");
}
public static void main(String args[])
{
StaticTest st1 = new StaticTest();
st1.print();
StaticTest st2 = new StaticTest();
st2.print();
}
}
正确答案: C
A、Never.
B、Each time a new object of type StaticTest is created.
C、Once when the class is loaded into the Java virtual machine.
D、Only when the main() method is executed.
解析:
类的加载顺序
(1) 父类静态代码块(包括静态初始化块,静态属性,但不包括静态方法)
(2) 子类静态代码块(包括静态初始化块,静态属性,但不包括静态方法 )
(3) 父类非静态代码块( 包括非静态初始化块,非静态属性 )
(4) 父类构造函数
(5) 子类非静态代码块 ( 包括非静态初始化块,非静态属性 )
(6) 子类构造函数
其中:类中静态块按照声明顺序执行,并且(1)和(2)不需要调用new类实例的时候就执行了(意思就是在类加载到方法区的时候执行的)
15、关于继承和实现说法正确的 是 ? ( )
正确答案: A
A、类可以实现多个接口,接口可以继承(或扩展)多个接口
B、类可以实现多个接口,接口不能继承(或扩展)多个接口
C、类和接口都可以实现多个接口
D、类和接口都不可以实现多个接口
解析:
1.类与类之间的关系为继承,只能单继承,但可以多层继承。 2.类与接口之间的关系为实现,既可以单实现,也可以多实现。 3.接口与接口之间的关系为继承,既可以单继承,也可以多继承。
java类是单继承的。 java接口可以多继承。 不允许类多重继承的主要原因是,如果A同时继承B和C,而B和C同时又有一个D方法,A如何决定该继承那一个呢? 但接口不存在这样的问题,接口全都是抽象方法继承谁都无所谓,所以接口可以继承多个接口
16、关于以下程序代码的说明正确的
class HasStatic{
private static int x = 100;
public static void main(String args[ ]){
HasStatic hs1 = new HasStatic();
hs1.x++;
HasStatic hs2 = new HasStatic();
hs2.x++;
hs1=new HasStatic();
hs1.x++;
HasStatic.x--;
System.out.println( "x=" +x);
}
}
正确答案: D
A、5行不能通过编译,因为引用了私有静态变量
B、10行不能通过编译,因为x是私有静态变量
C、程序通过编译,输出结果为:x=103
D、程序通过编译,输出结果为:x=102
解析:
如果变量被static修饰,那么该变量属于当前类,该类的所有对象操作的都是同一个变量。
因为x的 修饰符为 static 所以x为类变量,即对于所有的实例来说,他们访问的x为同一个x,类变量存储在方法区,不属于每个实例的私有,
刚开始x=100
调用hs1.x++ x为101;
调用hs2.x++ x为102;
调用hs1.x++ x为103 (此时hs1指向了一个新的HasStatic实例,但是依然访问的是同一个X)
调用HasStatic.x-- x为102
17、下面有关JAVA异常类的描述,说法错误的是?
正确答案: D
A、异常的继承结构:基类为Throwable,Error和Exception继承Throwable,RuntimeException和IOException等继承Exception
B、非RuntimeException一般是外部错误(非Error),其一般被 try{}catch语句块所捕获
C、Error类体系描述了Java运行系统中的内部错误以及资源耗尽的情形,Error不需要捕捉
D、RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等,必须被 try{}catch语句块所捕获
解析:
运行时异常故名思议就是程序在运行的时候出现异常,隐含的一个前提就是程序在编译时是检测不到异常的存在,
作者本人也并不知道是否自己的代码中含有运行时异常,所以根本也不可能提前使用
try{
}catch{
}
捕获
异常是指程序运行时(非编译)所发生的非正常情况或错误,当程序违反了语音规则,jvm就会将出现的错误表示一个异常抛出。
异常也是java 的对象,定义了基类
java.lang.throwable作为异常父类。 这些异常类又包括error和exception。
两大类
error类异常主要是运行时逻辑错误导致,一个正确程序中是不应该出现error的。当出现error一般jvm会终止。
exception表示可恢复异常,包括检查异常和运行时异常。
检查异常是最常见异常比如 io异常sql异常,都发生在编译阶段。
这类通过try、catch捕捉
而运行时异常,编译器没有强制对其进行捕捉和处理。
一般都会把异常向上抛出,直到遇到处理代码位置,若没有处理块就会抛到最上层,多线程用thread。run()抛出,单线程用main()抛出。
常见的运行异常包括 空指针异常 类型转换异常 数组月结异常 数组存储异常 缓冲区溢出异常 算术异常等,
18、非抽象类实现接口后,必须实现接口中的所有抽象方法,除了abstract外,方法头必须完全一致.
正确答案: B
A、正确
B 、错误
解析:
实际上这道题考查的是两同两小一大原则:
方法名相同,参数类型相同
子类返回类型小于等于父类方法返回类型,
子类抛出异常小于等于父类方法抛出异常,
子类访问权限大于等于父类方法访问权限。
19、关于 Socket 通信编程,以下描述正确的是:( )
正确答案: C
A、客户端通过new ServerSocket()创建TCP连接对象
B、客户端通过TCP连接对象调用accept()方法创建通信的Socket对象
C、客户端通过new Socket()方法创建通信的Socket对象
D、服务器端通过new ServerSocket()创建通信的Socket对象
解析:
客户端通过new Socket()方法创建通信的Socket对象
服务器端通过new ServerSocket()创建TCP连接对象 accept接纳客户端请求
ServerSocket ss=new ServerSocket(3000);
Socket s=ss.accept();//当有客户端连接时才创建Socket对象,而不是new ServerSocket时创建
客户端通过socket()方法创建socket对象 服务端通过serverSocket()方法创建TCP对象,通过accept()方法接受客户端请求
20、下面有关servlet service描述错误的是?
正确答案: B
A、不管是post还是get方法提交过来的连接,都会在service中处理
B、doGet/doPost 则是在 javax.servlet.GenericServlet 中实现的
C、service()是在javax.servlet.Servlet接口中定义的
D、service判断请求类型,决定是调用doGet还是doPost方法
解析:
21、下列哪个说法是正确的()
正确答案: D
A、ConcurrentHashMap使用synchronized关键字保证线程安全
B、HashMap实现了Collction接口
C、Array.asList方法返回java.util.ArrayList对象
D、SimpleDateFormat是线程不安全的
解析:
A. JDK1.8 的 ConcurrentHashMap 采用CAS+Synchronized保证线程安全。
JDK1.7 及以前采用segment的分段锁机制实现线程安全,其中segment继承自ReentrantLock,因此采用Lock锁来保证线程安全。
B.
C. Arrays.asList() 返回 java.util.Arrays.ArrayList 对象,这里的 ArrayList 是 Arrays 私有的内部类
D.
22、DBMS 中实现事务持久性的子系统是()
正确答案: D
A、安全性管理子系统
B、完整性管理子系统
C、并发控制子系统
D、恢复管理子系统
解析:
DBMS中事务有四个特性,持久性,一致性,原子性,隔离性,持久性实现恢复管理子系统
,一致性实现并发控制子系统,原子性实现完整性管理子系统,隔离性实现安全控制管理子系统
原子性:事务是一组不可分割的操作单元,这组单元要么同时成功要么同时失败(由DBMS的事务管理子系统来实现);
一致性:事务前后的数据完整性要保持一致(由DBMS的完整性子系统执行测试任务);
隔离性:多个用户的事务之间不要相互影响,要相互隔离(由DBMS的并发控制子系统实现);
持久性:一个事务一旦提交,那么它对数据库产生的影响就是永久的不可逆的,如果后面再回滚或者出异常,都不会影响已提交的事务(由DBMS的恢复管理子系统实现的)
23、对于JVM内存配置参数:
-Xmx10240m -Xms10240m -Xmn5120m -XXSurvivorRatio=3
,其最小内存值和Survivor区总大小分别是()
正确答案: D
A、5120m,1024m
B、5120m,2048m
C、10240m,1024m
D、10240m,2048m
解析:
-Xmx10240m:代表最大堆
-Xms10240m:代表最小堆
-Xmn5120m:代表新生代
-XXSurvivorRatio=3:代表Eden:Survivor = 3 根据Generation-Collection算法(目前大部分JVM采用的算法),一般根据对象的生存周期将堆内存分为若干不同的区域,一般情况将新生代分为Eden ,两块Survivor; 计算Survivor大小, Eden:Survivor = 3,
总大小为5120,
3x+x+x=5120 x=1024
新生代大部分要回收,采用Copying算法,快!
老年代 大部分不需要回收,采用Mark-Compact算法
24、下列关于JAVA多线程的叙述正确的是()
正确答案: B C
A、调用start()方法和run()都可以启动一个线程
B、CyclicBarrier和CountDownLatch都可以让一组线程等待其他线程
C、Callable类的call()方法可以返回值和抛出异常
D、新建的线程调用start()方法就能立即进行运行状态
解析:
A,start是开启线程,run是线程的执行体,run是线程执行的入口。
B,CyclicBarrier和CountDownLatch都可以让一组线程等待其他线程。前者是让一组线程相互等待到某一个状态再执行。后者是一个线程等待其他线程结束再执行。
C,Callable中的call比Runnable中的run厉害就厉害在有返回值和可以抛出异常。同时这个返回值和线程池一起用的时候可以返回一个异步对象Future。
D,start是把线程从new变成了runnable
25、下列哪个是合法的 Java 标识符?( )
正确答案: B C
A、Tree&Glasses
B、FirstJavaApplet
C、First_Applet
D、273.5
解析
Java标识符:
标识符由26个英文字符大小写(az,AZ)、数字(0~9)、下划线(_)和美元符号($)组成;
不能以数字开头,不能是关键字;
严格区分大小写;
标识符的可以为任意长度;
26、jdk1.8版本之前的前提下,接口和抽象类描述正确的有( )
正确答案: B C
A、抽象类没有构造函数
B、接口没有构造函数
C、抽象类不允许多继承
D、接口中的方法可以有方法体
抽象类可以🈶️构造函数,只是不能实例化
27、以下哪种JAVA的变量表达式使得变量a和变量b具有相同的内存引用地址( )
正确答案: A B
A、String a = “hello”; String b = “hello”;
B、Integer a; Integer b = a;
C、int a = 1; Integer b = new Integer(1);
D、int a = 1; Integer b = 1;
解析:
存引用地址,是指栈中存放的地址,来指向堆中的某个位置。
int 是基本类型,数据直接存放在栈中,不存在内存引用地址的说法
A对 指向常量池里的"hello"。
B对 题中没说声明的a是局部变量。
C错 int a =1;并不指向堆中,它只有值,没有引用地址,Integer b =new Integer(1);指向堆中地址为1的位置。
D错 原因同C
首先结论:
(1)int与Integer、new Integer()进行比较时,结果永远为true
(2)Integer与new Integer()进行比较时,结果永远为false
(3)Integer与Integer进行==比较时,看范围;在大于等于-128小于等于127的范围内为true,在此范围外为false。
下面是解析过程:
1.Integer与int比较时,Integer会有拆箱的过程,我们可以看看拆箱的代码:
直接返回的就是value,因此int与Integer以及new Integer()进行 ==比较时结果都是true。
2.Integer a=n时,如果n大于等于-128小于等于127时,会直接从IntegerCache中取,不在这个范围内,会new一个对象,所以Integer与new Integer进行 ==比较时,结果都是false。
3.Integer与Integer比较,需要看范围,如果在-128~127(包含-128,不包含127)范围内,因为都是从IntegerCache中取值,所以相等;若不在这个范围内,则都要去new一个对象,所以结果为false。
28、Java是一门支持反射的语言,基于反射为Java提供了丰富的动态性支持,下面关于Java反射的描述,哪些是错误的:( )
正确答案: A D F
A、Java反射主要涉及的类如Class, Method, Filed,等,他们都在java.lang.reflet包下
B、通过反射可以动态的实现一个接口,形成一个新的类,并可以用这个类创建对象,调用对象方法
C、通过反射,可以突破Java语言提供的对象成员、类成员的保护机制,访问一般方式不能访问的成员
D、Java反射机制提供了字节码修改的技术,可以动态的修剪一个类
E、Java的反射机制会给内存带来额外的开销。例如对永生堆的要求比不通过反射要求的更多
F、Java反射机制一般会带来效率问题,效率问题主要发生在查找类的方法和字段对象,因此通过缓存需要反射类的字段和方法就能达到与之间调用类的方法和访问类的字段一样的效率
解析:
反射指的是在运行时能够分析类的能力的程序。
反射机制可以用来:
1.在运行时分析类的能力–检查类的结构–所用到的就是java.lang.reflect包中的Field、Method、Constructor,分别用于描述类的与、方法和构造器。A中的Class类在java.lang中。
2.在运行时查看对象。
3.实现通用的数组操作代码。
反射机制的功能:
在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态***。
反射机制常见作用:
动态加载类、动态获取类的信息(属性、方法、构造器);动态构造对象;动态调用类和对象的任意方法、构造器;动态调用和处理属性;获取泛型信息(新增类型:ParameterizedType,GenericArrayType等);处理注解(反射API:getAnnotationsdeng等)。
反射机制性能问题:
反射会降低效率。
void setAccessible(boolean flag):是否启用访问安全检查的开关,true屏蔽Java语言的访问检查,使得对象的私有属性也可以被查询和设置。禁止安全检查,可以提高反射的运行速度。
可以考虑使用:cglib/javaassist操作。
29、下面哪些赋值语句是正确的()
正确答案: A B D
A、long test=012
B、float f=-412
C、int other =(int)true
D、double d=0x12345678
E、byte b=128
解析:
java中不需要强制向下转型的合法数字类型转换图:core java书中有记载
30、以下语句返回值为 true 的是()
正确答案: A B
A、a1a2
B、d1d2
C、b1b2
D、c1c2
答案是 A和B。
首先a1和a2涉及到自动装箱,等于执行了Integer.valueOf(int i)
,对于小于等于127的数值会从Integer内置的缓存中获取Integer对象,所以a1和a2的地址是一样的。
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.***[i + (-IntegerCache.low)];
return new Integer(i);
}
同理b1和b2的值大于127,不会使用到缓存,会创建2个Integer对象,他们的地址是不同的,所以b1不等于b2。
c1和c2是两个对象的引用,对象地址不等,所以不相等。
d1和d2,d2是基本类型int型,所以在比较时比较的是值的大小。