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

本文主要探讨Java中的static关键字特性、类加载顺序、静态方法与实例方法的区别,以及序列化、访问权限、数据类型和容器集合类的细节。还涉及到了面试中可能被问到的基础知识点,如成员变量与静态变量、继承与内部类的交互等。

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

static

public

final

static关键字:针对多个对象共有的成员变量值时所提出的。

特点:1、随着类的加载而加载;    2、优先于对象存在;    3、被类的所有对象共享;       4、可以通过类名直接调用。

注意事项:1.在静态方法中是没有this关键字的;        2.静态方法只能访问静态的成员变量和静态的成员方法。

B

5、运行下面代码,输出的结果是()

class A {

public A() {

System.out.println(“class A”);

}

{ System.out.println(“I’m A class”); }

static { System.out.println(“class A static”); }

}

public class B extends A {

public B() {

System.out.println(“class B”);

}

{ System.out.println(“I’m B class”); }

static { System.out.println(“class B static”); }

public static void main(String[] args) {

new B();

class A static

class B static

I’m A class

class A

I’m B class

class B

Java程序初始化顺序:

  1. 父类的静态代码块
  1. 子类的静态代码块
  1. 父类的普通代码块
  1. 父类的构造方法
  1. 子类的普通代码块
  1. 子类的构造方法

6、如果一个list初始化为{5,3,1},执行以下代码后,其结果为()?

nums.add(6);

nums.add(0,4);

nums.remove(1);

[5, 3, 1, 6]

[4, 3, 1, 6]

[4, 3, 6]

[5, 3, 6]

list{5,3,1}

nums.add(6); //往后边加一个6,{5,3,1,6}

nums.add(0,4);//往下标为0的数加一个4,{4,5,3,1,6}

nums.remove(1); // 移除下标为1 的元素,{4,3,1,6}

B

7、有以下一个对象:

public class DataObject implements Serializable{

private static int i=0;

private String word=" ";

public void setWord(String word){

this.word=word;

}

public void setI(int i){

Data0bject.i=i;

}

}

将此对象序列化为文件,并在另外一个JVM中读取文件,进行反序列化,请问此时读出的Data0bject对象中的word和i的值分别为:

DataObject object=new Data0bject ( );

object.setWord(“123”);

object.setI(2);

“”, 0

“”, 2

“123”, 2

“123”, 0

序列化保存的是对象的状态,静态变量属于类的状态,因此,序列化并不保存静态变量。所以i是没有改变的

D

8、以下 b 的值是: byte b = (byte)129;

-126

-127

-128

-129

129 int类型(4个字节)二进制: 00000000 00000000 00000000 10000001

在计算机系统中,数值一律用补码来表示(存储),正数的补码和源码相同

  1. int -> byte(1个字节),截取: 10000001
  1. 补码转反码:1开始则为负数,负数得到反码是末位-1: 10000000
  1. 负数的反码转原码(最高位即符号位不变):11111111
  1. 转换为十进制:-(27-1)=-127

B

9、关于 访问权限说法正确 的是 ? (    )

外部类定义前面可以修饰public,protected和private

局部内部类前面可以修饰public,protected和private

匿名内部类前面可以修饰public,protected和private

以上说法都不正确

1、外部类前可以修饰:public、default、abstract、final

2、内部类前可以修饰:**public、****protected、**default、private、abstract、final、static

3、局部内部类前可以修饰:abstract、final

其中:访问修饰符(public、protected、default、private),其他都是非访问修饰

在Java中,可以将一个类定义在另一个类里面或者一个方法里边,这样的类称为内部类,广泛意义上的内部类一般包括四种:成员内部类,局部内部类,匿名内部类,静态内部类 。

1.成员内部类

(1)该类像是外部类的一个成员,可以无条件的访问外部类的所有成员属性和成员方法(包括private成员和静态成员);

(2)成员内部类拥有与外部类同名的成员变量时,会发生隐藏现象,即默认情况下访问的是成员内部类中的成员。如果要访问外部类中的成员,需要以下形式访问:【外部类.this.成员变量  或  外部类.this.成员方法】;

(3)在外部类中如果要访问成员内部类的成员,必须先创建一个成员内部类的对象,再通过指向这个对象的引用来访问;

(4)成员内部类是依附外部类而存在的,也就是说,如果要创建成员内部类的对象,前提是必须存在一个外部类的对象;

(5)内部类可以拥有private访问权限、protected访问权限、public访问权限及包访问权限。如果成员内部类用private修饰,则只能在外部类的内部访问;如果用public修饰,则任何地方都能访问;如果用protected修饰,则只能在同一个包下或者继承外部类的情况下访问;如果是默认访问权限,则只能在同一个包下访问。外部类只能被public和包访问两种权限修饰。

2.局部内部类

(1)局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内;

(2)局部内部类就像是方法里面的一个局部变量一样,是不能有public、protected、private以及static修饰符的。

3.匿名内部类

(1)一般使用匿名内部类的方法来编写事件监听代码;

(2)匿名内部类是不能有访问修饰符和static修饰符的;

(3)匿名内部类是唯一一种没有构造器的类;

(4)匿名内部类用于继承其他类或是实现接口,并不需要增加额外的方法,只是对继承方法的实现或是重写。

4.内部静态类

(1)静态内部类是不需要依赖于外部类的,这点和类的静态成员属性有点类似;

(2)不能使用外部类的非static成员变量或者方法。

D

10、下列在Java语言中关于数据类型和包装类的说法,正确的是()

基本(简单)数据类型是包装类的简写形式,可以用包装类替代基本(简单)数据类型

long和double都占了64位(64bit)的存储空间。

默认的整数数据类型是int,默认的浮点数据类型是float。

和包装类一样,基本(简单)数据类型声明的变量中也具有静态方法,用来完成进制转化等。

A,包装和基本类型不是同一个概念

B,long和double都占16字节

C,默认的浮点数据类型是double,如果要指明使用float,则需要在后面加f

D,基本数据类型是没有静态方法的,但是基本数据类型的包装类却有

1、整数类型byte(1个字节)short(2个字节)int(4个字节)long(8个字节)

2、字符类型char(2个字节)

3、浮点类型float(4个字节)double(8个字节)

B

11、对于上面这段代码,以下说法正确的是:

public class Test

{

public int x;

public static void main(String []args)

{

System. out. println(“Value is” + x);

}

}

程序会打出 “Value is 0”

程序会抛出 NullPointerException

非静态变量不能够被静态方法引用

编译器会抛出 "possible reference before assignment"的错误

当类加载时,static静态方法随着类加载而初始化,此时实例对象还未被创建,但是非静态成员变量需要等到实例对象创建才会被初始化,故无法被引用。静态方法先行执行,导致变量x还未被初始化,所以编译出错

C

12、下列关于容器集合类的说法正确的是?

LinkedList继承自List

AbstractSet继承自Set

HashSet继承自AbstractSet

WeakMap继承自HashMap

a选项linkedlist类是实现了List接口,而不是继承

b选项AbstractSet类实现Set接口

c选项HashSet继承 AbstractSet类,同时也实现set

d选项 WeakMap是js中的,java的是WeakHashMap

C

13、说明输出结果。

import java.util.Date;

public class SuperTest extends Date{

private static final long serialVersionUID = 1L;

private void test(){

System.out.println(super.getClass().getName());

}

public static void main(String[]args){

new SuperTest().test();

}

}

SuperTest

SuperTest.class

test.SuperTest

test.SuperTest.class

1、super.getClass()调用的是父类即Date类的方法;

2、父类的getClass方法继承自Object类,且该方法是final的,不能被修改;

3、Object中的getClass()返回的是当前运行的类,即SuperTest;

4、Class中的getName()方法针对引用类型的返回的是包名+类名,即test.SuperTest;

5、如果想要返回父类,即Date的名称,可以使用super.getClass().getSuperClass().getName();

6、此处super还是this,亦或直接getClass().getName(),结果都是一样的;

最后,附一张自己面试前准备的脑图:

image

面试前一定少不了刷题,为了方便大家复习,我分享一波个人整理的面试大全宝典

  • Java核心知识整理

image

  • Spring全家桶(实战系列)

image.png

Step3:刷题

既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。

以下是我私藏的面试题库:

image

很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。

最后祝愿各位身体健康,顺利拿到心仪的offer!

想要返回父类,即Date的名称,可以使用super.getClass().getSuperClass().getName();

6、此处super还是this,亦或直接getClass().getName(),结果都是一样的;

最后,附一张自己面试前准备的脑图:

[外链图片转存中…(img-1JR7SuUX-1714132604719)]

面试前一定少不了刷题,为了方便大家复习,我分享一波个人整理的面试大全宝典

  • Java核心知识整理

[外链图片转存中…(img-pAkRYSjG-1714132604720)]

  • Spring全家桶(实战系列)

[外链图片转存中…(img-OHMrwkdN-1714132604721)]

Step3:刷题

既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。

以下是我私藏的面试题库:

[外链图片转存中…(img-CMyfPm3Z-1714132604722)]

很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。

最后祝愿各位身体健康,顺利拿到心仪的offer!

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值