Java小题精炼训练营(篇二)

static

synchronized

native

None of these.

构造方法不能被子类继承,所以用final修饰没有意义。构造方法用于创建一个新的对象,不能作为类的静态方法,所以用static修饰没有意义。此外,Java语言不支持native或synchronized的构造方法。

1 构造方法可以被重载,一个构造方法可以通过this关键字调用另一个构造方法,this语句必须位于构造方法的第一行;

重载:方法的重载(overload):重载构成的条件:方法的名称相同,但参数类型或参数个数不同,才能构成方法的重载。

2 当一个类中没有定义任何构造方法,Java将自动提供一个缺省构造方法;

3 子类通过super关键字调用父类的一个构造方法;

4 当子类的某个构造方法没有通过super关键字调用父类的构造方法,通过这个构造方法创建子类对象时,会自动先调用父类的缺省构造方法

5 构造方法不能被static、final、synchronized、abstract、native修饰,但可以被public、private、protected修饰;

6 构造方法不是类的成员方法;

7 构造方法不能被继承。

E

6、指出下来程序运行的结果是

good and abc

good and gbc

tst ok and abc

tst ok and gbc

实参和形参的问题。"ex.change(ex.str, ex.ch)"语句调用"change"方法时,将ex.str变量(实参)的赋给了"change"方法中的str变量(形参),而将ex.ch(实参)的地址赋给了"change"方法中的ch(形参)。"change"方法运行时,第一条语句改变的是方法中形参的值,对实参没影响,第二条语句由于是直接改变的ch所指地址的值,所以把实参也进行了改变。

由于栈帧1的ex局部变量指向的对象内的成员str指向的对象没有任何变化,因此

System.out.println(ex.str+“and”); 依然打印结果为:good and

而成员ch指向的对象内容有所变化,因此

System.out.println(ex.ch);打印结果为:gbc

B

7、在JAVA中,假设A有构造方法A(int a),则在类A的其他构造方法中调用该构造方法和语句格式应该为()

this.A(x)

this(x)

super(x)

A(x)

this的作用其中一个就是在一个构造方法中调用另一个构造方法,格式为this(参数);

super是调用父类的方法;

A(a)这种形式是在new一个类时使用

B

8、阅读如下代码。 请问,对语句行 test.hello(). 描述正确的有()

package NowCoder;

class Test {

public static void hello() {

System.out.println(“hello”);

}

}

public class MyApplication {

public static void main(String[] args) {

// TODO Auto-generated method stub

Test test=null;

test.hello();

}

}

能编译通过,并正确运行

因为使用了未初始化的变量,所以不能编译通过

以错误的方式访问了静态方法

能编译通过,但因变量为null,不能正常运行

因为Test类的hello方法是静态的,所以是属于类的,当实例化该类的时候,静态会被优先加载而且只加载一次,所以不受实例化new Test();影响,只要是使用到了Test类,都会加载静态hello方法

在其他类的静态方法中也是可以调用公开的静态方法,此题hello方法是使用public修饰的所以在MyApplication中调用hello也是可以的。

即使Test test=null;这里也会加载静态方法,所以test数据中包含Test类的初始化数据。(静态的,构造的,成员属性)因此test.hello是会调用到hello方法的

A

9,下面有关java classloader说法正确的是()?

ClassLoader就是用来动态加载class文件到内存当中用的

JVM在判定两个class是否相同时,只用判断类名相同即可,和类加载器无关

ClassLoader使用的是双亲委托模型来搜索类的

Java默认提供的三个ClassLoader是Boostrap ClassLoader,Extension ClassLoader,App ClassLoader

JDK中提供了三个ClassLoader,根据层级从高到低为:

  1. Bootstrap ClassLoader,主要加载JVM自身工作需要的类。
  1. Extension ClassLoader,主要加载%JAVA_HOME%\lib\ext目录下的库类。
  1. Application ClassLoader,主要加载Classpath指定的库类,一般情况下这是程序中的默认类加载器一般情况下这是程序中的默认类加载器,也是ClassLoader.getSystemClassLoader() 的返回值。

JVM加载类的实现方式,我们称为 双亲委托模型

如果一个类加载器收到了类加载的请求,他首先不会自己去尝试加载这个类,而是把这个请求委托给自己的父加载器,每一层的类加载器都是如此,因此所有的类加载请求最终都应该传送到顶层的Bootstrap ClassLoader中,只有当父加载器反馈自己无法完成加载请求时,子加载器才会尝试自己加载。

双亲委托模型的重要用途是为了解决类载入过程中的安全性问题。

假设有一个开发者自己编写了一个名为**Java.lang.Object的类,想借此欺骗JVM。现在他要使用自定义ClassLoader来加载自己编写的java.lang.Object类。然而幸运的是,双亲委托模型不会让他成功。因为JVM会优先在Bootstrap ClassLoader的路径下找到java.lang.Object**类,并载入它

ACD

10、tring s=null;下面哪个代码片段可能会抛出NullPointerException?

if((s!=null)&(s.length()>0))

if((s!=null)&&(s.length()>0))

if((s==null)|(s.length()==0))

if((s==null)||(s.length()==0))

s为null,因此只要调用了s.length()都会抛出空指针异常。因此这个题目就是考察if语句的后半部分会不会执行。

A,单个与操作的符号& 用在整数上是按位与,用在布尔型变量上跟&&功能类似,但是区别是无论前面是否为真,后面必定执行,因此抛出异常

B,与操作,前半部分判断为假,后面不再执行

C,这里跟 & 和&& 的区别类似,后面必定执行,因此抛出异常

D,或语句,前面为真,整个结果必定为真,后面不执行

AC

11、关于OutOfMemoryError,下面说法正确的是()?

java.lang.OutOfMemoryError: PermGen space 增加-XX:MaxPermSize这个参数的值的话,这个问题通常会得到解决。

java.lang.OutOfMemoryError: Requested array size exceeds VM limit当你正准备创建一个超过虚拟机允许的大小的数组时,这条错误将会出现

java.lang.OutOfMemoryError: Java heap space 一般情况下解决这个问题最快的方法就是通过-Xmx参数来增加堆的大小

java.lang.OutOfMemoryError: nativeGetNewTLA这个异常只有在jRockit虚拟机时才会碰到

关于此题,《深入理解java虚拟机》有关于OOM(OutOfMemory)问题的解释

A:属于运行时常量池导致的溢出,设置-XX:MaxPermSize可以解决这个问题,

B:属于堆空间不足导致的错误,问题比较少见,解决方式和C相同,

C:属于java堆内存问题,一般的手段是通过内存映像分析工具,对Dump出来的堆转储存快照进行分析,重点是确认内存中的对象是否是有必要的,也就是要判断是出现了内存泄漏,还是出现了内存溢出,如果是内存列楼,通过工具检查泄露对象打GC Roots的引用链信息,可以准确的确定出泄露代码的位置,不存在泄露,就应该检查虚拟机的堆参数,如果可以继续调大,可以设置-Xmx解决问题

D:java.lang.OutOfMemoryError: nativeGetNewTLA指当虚拟机不能分配新的线程本地空间(Thread Local Area)的时候错误信息,此错误是线程申请一个新的TLA时产生的,这个异常一般只会发生在jRockit虚拟机,只有过于绝对。

ABC

12、针对以下代码,哪些选项执行后是true的:()

class CompareReference{

public static void main(String [] args){

float f=42.0f;

float f1[]=new float[2];

float f2[]=new float[2];

float[] f3=f1;

long x=42;

f1[0]=42.0f;

}

}

f1==f2

x==f1[0]

f1==f3

f2==f1[1]

如果两个操作数其中有一个是double类型,另一个操作就会转换为double类型。否则,如果其中一个操作数是float类型,另一个将会转换为float类型。否则,如果其中一个操作数是long类型,另一个会转换为long类型。否则,两个操作数都转换为int类型。故,x==f1[0]中,x将会转换为float类型。基本类型之间的比较,应该会将低精度类型自动转为高精度类型再比较。

byte ,  short ,  int ,  long ,  fload ,  double

作比较的时候会自动向上转型, 向下转型的时候则需要强转

BC

13、关于equals和hashCode描述正确的是    ()

两个obj,如果equals()相等,hashCode()一定相等(符合代码规范的情况下)

两个obj,如果hashCode()相等,equals()不一定相等

两个不同的obj, hashCode()可能相等

其他都不对

“==”:作用是判断两个对象的地址是否相等,即,判断两个对象是不是同一个对象,如果是基本数据类型,则比较的是值是否相等。

“equal”:作用是判断两个对象是否相等,但一般有两种使用情况

1.类没有覆盖equals()方法,则相当于通过“==”比较

2.类覆盖equals()方法,一般,我们都通过equals()方法来比较两个对象的内容是否相等,相等则返回true,如String

hashCode()的存在是为了查找的快捷性,用于在散列存储结构中确定对象的存储地址

如果两个对象 equals相等,则 hashCode()也一定相等

如果 equals方法被重写,则 hashCode()也应该被重写

如果两个对象的 hashCode()相等, equals()方法不一定相等

equals方法没有重写,比较的就是应用类型的变量所指向的对象的地址

ABC

14、下面关于面向对象的一些理解哪些是错误的(    )

面向对象的最重要的特性是支持继承、封装和多态

系统设计应该遵循开闭原则,系统应该稳定不不可修改,但应支持通过继承、组合等方式进行扩展

函数式的语言必然是面向对象的语言

面向对象设计时,每个类的职责应该单一,不要再一个类中引入过多的接口

过程式语言和面向对象的语言各有其优势,过程式语言更加灵活,面向对象语言更加强调抽象和封装

Java和C++都是静态类型的面向对象编程语言

典型的函数式语言haskell

C

15、下面正确的2项是?

public class NameList

{

private List names = new ArrayList();

public synchronized void add(String name)

{

names.add(name);

}

public synchronized void printAll() {

for (int i = 0; i < names.size(); i++)

{

System.out.print(names.get(i) + “”);

}

}

public static void main(String[]args)

{

final NameList sl = new NameList();

for (int i = 0; i < 2; i++)

{

new Thread()

{

public void run()

{

总结

如果你选择了IT行业并坚定的走下去,这个方向肯定是没有一丝问题的,这是个高薪行业,但是高薪是凭自己的努力学习获取来的,这次我把P8大佬用过的一些学习笔记(pdf)都整理在本文中了

《Java中高级核心知识全面解析》

小米商场项目实战,别再担心面试没有实战项目:

vate List names = new ArrayList();

public synchronized void add(String name)

{

names.add(name);

}

public synchronized void printAll() {

for (int i = 0; i < names.size(); i++)

{

System.out.print(names.get(i) + “”);

}

}

public static void main(String[]args)

{

final NameList sl = new NameList();

for (int i = 0; i < 2; i++)

{

new Thread()

{

public void run()

{

总结

如果你选择了IT行业并坚定的走下去,这个方向肯定是没有一丝问题的,这是个高薪行业,但是高薪是凭自己的努力学习获取来的,这次我把P8大佬用过的一些学习笔记(pdf)都整理在本文中了

《Java中高级核心知识全面解析》

[外链图片转存中…(img-uWQBtm7k-1714361663981)]

小米商场项目实战,别再担心面试没有实战项目:

[外链图片转存中…(img-YLLk5yPa-1714361663982)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值