JavaSE基础小知识Ⅱ(很容易错!!!)

1. 变量被final修饰后不能再指向其他对象,但可以重写

如果是引用变量被final修饰,那么的确如此;
基本变量不能重写

2. 下列代码的输出结果是?

public class Test {static {int x = 5; }static int x,y;   public static void main(String[] args) {x--;   myMethod();System.out.println(x+y+ ++x);}public static void myMethod() {y = x++ + ++x;}}

答案:3
解析:
静态代码块的变量属于局部变量,这里的5,代码块结束就会销毁

  static {int x = 5; }
static int x,y;   // 全局基本类型的变量,默认值0
public static void main(String[] args) {x--;   myMethod();System.out.println(x+y+ ++x);}public static void myMethod() {y = x++ + ++x;}

x–变成-1
myMethod方法,x++的自增在两个x之间的+运行之后才会执行,所以y = -1+1 = 0
最后打印的结果1+0+2 = 3

3.下面哪些赋值语句是正确的?

A:long text = 012;
B:float t = -412;
C:int other = (int) true;
D:double d = 0x12345678;
E:byte b = 128;

答案:A,B,D

A正确,因为0开头的数字代表8进制数字,,010转化成是十进制就是8
在这里插入图片描述
B,小一点的int转float不会出错,大int转float会出错,因为float有效位数只有23位,不足以全部容纳32位的int

D,任何int转double不会出错,因为double的有效位数是53位,足够容纳全部的int

4. 下列程序的执行结果?

class Base {public Base(String s) {System.out.println("B");}
}
public class Dervid extends Base {public Dervid(String s) {System.out.println("D");}public static void main(String[] args) {System.out.println("C");}
}

A: BD
B: DB
C: C
D: 编译错误

答案是D
在这里插入图片描述

java当中,我们都知道一个规则,就是子类执行构造方法时,必须执行父类的同样结构的构造方法,这是由于继承的成员复用导致的

前置知识1

继承的成员复用(成员变量和成员方法可以传递给子类使用),由多个对象创建并功能叠加实现的

在这里插入图片描述
A类是父类,B类是A类的子类

我们可以看到,B类的对象当中同时存在了A类的对象+B类的对象,所以子类构造方法的调用必然会静默调用父类的构造方法

前置知识2

当父类和子类都没有重载构造方法的时候,java会默认使用super()关键字实现前置知识1里面的机制

public class A {
}
public class B extends A{public static void main(String[] args) {B b = new B();}
}

java帮我们自动实现了无参构造

上面的代码其实隐含了一些代码执行

public class A {public A(){}
}
public class B extends A{public static void main(String[] args) {B b = new B();}// java帮我们自动创建无参构造,只有在无参构造当中才会自动追加一个super()执行父类的无参构造public B(){super();}
}

但是我们一旦给父类创建了有参构造,去代替无参构造,子类的构造方法不会自动追加super(),此时子类的所有构造方法都需要程序员手动执行super(父类有参构造参数),也就是说此时子类不可能再有无参构造

public class A {public Integer i;public A(Integer i) {this.i = i;}
}
public class B extends A {public String t;// 父类成员变量形参+子类成员变量形参public B(Integer i, String t) {super(i);this.t = t;}// 至少得包含父类的Integer变量作为构造形参public B(Integer i) {super(i);}public static void main(String[] args) {B b = new B(1);}
}

现在我们回到题目
在这里插入图片描述

显然Dervid类作为子类,至少得包含父类的String s成员变量,并且需要显式的调用super(s);

在这里插入图片描述

这样才不会报错

如果此时父类追加一个无参构造

public class A {public Integer i;public A(Integer i) {this.i = i;}public A() {}
}

这样B类就可以有无参构造了

在这里插入图片描述

5.关于final关键字下列说法正确的是

A:如果修饰局部变量必须初始化
B:如果修饰类,则该类只能被一个子类继承
C:如果修饰方法,则该方法不能在子类当中重写
D:如果修饰方法,则该方法所在的类不能被继承

答案:C

final修饰局部变量不需要初始化,只需要在用到这个变量之前初始化即可,因为局部变量的使用范围仅在代码块内部,外部无法访问;
在这里插入图片描述

但是修饰成员变量必须直接初始化/构造方法间接初始化,因为这是全局变量,所有的代码都能访问到它,为了防止值被修改,在创建时就要赋值

在这里插入图片描述
或者构造方法初始化

在这里插入图片描述
如果这个全局变量是static的,那么只有直接初始化一条路可以走
在这里插入图片描述
在这里插入图片描述
因为static变量无法在非静态的方法中使用,构造方法全都是非静态的

此时有人会问,那static+final修饰的局部变量呢?

不好意思,static不能修饰局部变量

在这里插入图片描述
因为static是类共享的,局部变量不可能类共享,两者冲突

6. 下列代码运行的结果是

public class DemoTest {public static void main(String[] args) {String s;System.out.println("hello" + s);}
}

A:在控制台打印hello
B:报异常java.lang.NullPointException
C:编译报错
D:报异常java.RuntimeException

答案:C

很多人会说,因为这里s对象是null,其实不是的
在这里插入图片描述
s对象是null是不会编译错误的

真正错误的原因是s对象没有初始化,甚至连null都不是
在这里插入图片描述
如果初始化赋值null,就不会报错

局部变量不会自动初始化,但是全局的成员变量可以自动初始化为null

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/10403.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java--io流(二)

一、打印流(PrintStream[字节]、PrintWriter[字符]) (基本上可以代替前面所学的字节、字符输出流),二者关于打印数据功能相同(都方便且高效),但是关于数据写出不同,前者…

数据的均匀化分割算法(网格划分法、四叉树法(含C++代码))

数据的均匀化分割主要是指在分割过程中尽可能均匀地将数据点分布在各个子区域中,以保持数据分布的平衡和优化数据结构的性能。以下是几种可以实现数据均匀化分割的方法: 一. 网格划分法 1. 基本概念 虽然传统的网格划分法不是动态调整的,但通…

3款超好用的智能AI写作神器,不容错过!

在当代写作领域,人工智能(AI)辅助的写作工具已显著地改变了创作过程,不仅优化了撰写效率还提高了内容质量。为了协助读者更好地了解并利用这些先进的工具,本文将详细评述3种卓越的AI驱动的写作辅助软件,每一…

AJ65SBT2B-64DA 三菱CC-Link D/A转换模块

AJ65SBT2B-64DA 是将数字值(16位有符号BIN数据)转换为模拟值(电压或电流)的模块。 AJ65SBT2B-64DA参数说明:4通道;输入分辨率0~12000,-12000~12000,-16000~16000;输出DC-10~10V,DC0~20mA;转换速…

028.实现 strStr()

题意 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。 难度 简单 示例 例 1 输入:hays…

【Win10点击任务栏刷屏,卡死转圈(亲测有效)】

计算机疑难杂症001 Win10点击任务栏刷屏,卡死转圈(亲测有效)1、问题状况2、问题原因3、问题解决 Win10点击任务栏刷屏,卡死转圈(亲测有效) 1、问题状况 在偶然间,发现任务栏点不动了,点击无反应,再多点击几次&#x…

网络爬虫概述与原理

网络爬虫概述与原理 网络爬虫简介狭义上理解功能上理解常见用途总结 网络爬虫分类通用网络爬虫聚焦网络爬虫增量网络爬虫深度网络爬虫 网络爬虫流程网络爬虫采集策略深度有限搜索策略广度优先搜索策略 网络爬虫简介 通过有效地获取网络资源的方式,便是网络爬虫。网…

Threejs Shader动态修改Merge合并几何体中单个Mesh的颜色

目录 Merge合并 现象 思路 实现 为单个geometry添加映射 通过id检索Merge后的Geometry映射属性,获取顶点坐标 onBeforeCompile修改编译前材质的着色代码 编译前材质的顶点着色代码 编译前材质的片元着色代码 着色器代码 注意 效果 Merge合并 mergeBuf…

【GESP】2023年12月图形化二级 -- 小杨报数

小杨报数 【题目描述】 小杨需要从 1 1 1到 N N N报数。在报数过程中,小杨希望跳过 M M M的倍数。例如,如果 N 5 N5 N5, M 2 M2 M2,那么小杨就需要依次报出 1 1 1, 3 3 3, 5 5 5。 默认小猫角色和白色背…

数据库提权

1.此时实验需要用到的软件: (1)phpStudy该程序包集成最新的ApachePHPMySQL phpMyAdminZendOptimizer,一次性安装,无须配置即可使用,是非常方便、好用的PHP调试环境.该程序不仅包括PHP调试环境,还包括了开发工具、开发手册等.总之学习PHP只需…

Android 逆向

一、apk 查壳工具 ApkScan-PKID 相关APK文件可以在 豌豆荚 官网下载 ApkScan-PKID查壳工具 下载 - 简书 (jianshu.com) 二、脱壳工具:frida 1、Android端配置 frida-server: 该步骤需要使用到 adb,操作Android文件 Releases frida/frid…

对话NVIDIA英伟达:AI已照进现实 | 最新快讯

文 | MetaPost NVIDIA 创始人兼首席执行官黄仁勋在 GTC 2024 主题演讲上表示:下一波 AI 浪潮将是 AI 对物理世界的学习。 当下,全球范围内价值超过50万亿美金的行业正在竞相实现数字化,数字孪生技术正在赋能千行百业。NVIDIA Omniverse 中国…

TriDet: Temporal Action Detection with Relative Boundary Modeling

标题:TriDet:采用相对边界建模的时间动作检测 原文链接:TriDet: Temporal Action Detection With Relative Boundary Modeling (thecvf.com)https://openaccess.thecvf.com/content/CVPR2023/papers/Shi_TriDet_Temporal_Action_Detection_W…

笔试强训未触及题目(个人向)

1.DP22 最长回文子序列 1.题目 2.解析 这是一个区间dp问题,我们让dp[i][j]表示在区间[i,j]内的最长子序列长度,如图: 3.代码 public class LongestArr {//DP22 最长回文子序列public static void main(String[] args) {Scanner…

MSP430环境搭建

1.下载ccs编译器 注意:安装路径和工作路径不能出现中文! 没有说明的步骤就点next即可! 1.1下载适合自己电脑的压缩包。 下载好压缩包后解压,点击有图标进行安装。 1.2创建一个文件夹用于安装编译器位置 选择安装地址&#xff0…

新书速览|Rust编程与项目实战

掌握Rust编程基础和开发方法,实战网络编程、图像和游戏开发、数据分析项目 本书内容 Rust是一门系统编程语言,专注于安全,尤其是并发安全,它也是支持函数式、命令式以及泛型等编程范式的多范式语言。标准Rust在语法和性能上和标准…

贝壳面试:MySQL联合索引,最左匹配原则是什么?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中,最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多很重要的面试题: 1.谈谈你对MySQL联合索引的认识? 2.在MySQ…

信创 | 高效信创项目管理:关键步骤与实用技巧!

高效信创项目管理的关键步骤与实用技巧可以从多个维度进行分析和总结。首先,建立有效的工程管理体系是确保信创项目顺利实施的基础,这包括项目管理、质量管理、成本控制等方面的工作。其次,实现项目全流程精细化管理,如信息的及时…

使用./build.sh编译ORB_SLAM源码时出现报错:/usr/bin/ld:找不到 -lboost_serialization的解决办法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、/usr/bin/ld:找不到 -lboost_serialization1.问题描述2.解决(1). 下载源码(2) . 编译安装 一、/usr/bin/ld:找不到 -lboost_serialization 1.问题描述 在安装…

机器视觉任务中语义分割方法的进化历史

机器视觉任务中语义分割方法的进化历史 一、基于传统方法的图像分割二、基于卷积神经网络的图像分割三、基于Attention机制的图像分割四、语义分割模型的挑战与改进 在图像处理领域,传统图像分割技术扮演着重要角色。 一、基于传统方法的图像分割 这些方法包括大津…