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.mfbz.cn/a/614868.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ansible playbook

playbook playbook介绍 playbooks是ansible用于配置,部署,和管理被控节点的剧本。通过playbooks的详细描述,执行其中的tasks,可以让远端主机达到预期的状态。playbooks是由一个或多个”play”组成的列表。 当对一台机器做环境初…

【免费】在线识别通用验证码接口

模块优势价格5元1000次&#xff0c;每天免费100次api文档支持 使用量小的完全够用了 <?phpfunction Post_base64($base64_str){$url http://api.95man.com:8888/api/Http/Recog?Taken41******QK&imgtype1&len0 ; $fields array( ImgBase64>$base64_str); $ch…

MySQL系列之索引

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 往期热门专栏回顾 专栏…

为啥我说英语能决定程序员的天花板?

看到知乎有这样的一个问题&#xff0c;作为程序员的你&#xff0c;大学最后悔没有好好学哪门课&#xff1f; 很多人回答《软件工程》、《线性代数》、《微积分》等&#xff0c;各种都有。。 但我觉得&#xff0c;这些课都很重要&#xff0c;但没学好不妨碍自学。 其实对程序…

避雷:搭建AI知识库注意事项

AI知识库作为信息存储和进行智能处理的核心部分&#xff0c;受到越来越多企业的重视。为了更好地发展&#xff0c;企业也纷纷开始搭建AI知识库。然而&#xff0c;在搭建AI知识库的过程中&#xff0c;也有很多雷区容易踩到&#xff0c;导致项目延迟、效果不佳甚至失败。所以&…

GPT-SoVits:语音克隆,语音融合

首发网站 https://tianfeng.space 前言 零样本文本到语音&#xff08;TTS&#xff09;&#xff1a; 输入 5 秒的声音样本&#xff0c;即刻体验文本到语音转换。少样本 TTS&#xff1a; 仅需 1 分钟的训练数据即可微调模型&#xff0c;提升声音相似度和真实感。跨语言支持&…

使用xtuner微调InternLM-Chat-7B

1. 安装xtuner #激活环境 source activate test_llm # 安装xtuner pip install xtuner#还有一些依赖项需要安装 future>0.6.0 cython lxml>3.1.0 cssselect mmengine 2. 创建一个ft-oasst1 数据集的工作路径&#xff0c;进入 mkdir ft-oasst1 cd ft-oasst1 3.XTune…

树的基本介绍

引入 定义 表示 相关概念 结点&#xff1a;数据元素与指向分支的指针两部分组成 树的深度&#xff1a;树中结点的最大层次 将树A结点(根结点)去掉&#xff0c;树A就变成了森林 区别 实现

内存拆解分析表:学习版[图片]

对拆解system中主要是对比测试机和对比机之间的差距&#xff0c;测试机那些地方高于对比机 拆解表&#xff0c;作为理解 在拆解表中system测试机比对比机多出113M 这说明是有问题的 对system拆解&#xff1a; system12345对比机9102294380941069391081628测试机10252010331…

【Python系列】字节串与字典字节串

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

模拟集成电路(3)----单级放大器(共源极)

模拟集成电路(3)----单级放大器&#xff08;共源极&#xff09; 放大是模拟电路的基本功能 大多数自然模拟信号太小而无法处理需要足够的信噪比 理想的放大器 线性&#xff1a;无限的幅度和频率范围 输入阻抗无限大 输出阻抗无限小 共源放大器 共源放大器就是将源极接A…

关于Matplotlib如何在网页中使用?

目录 一、如何在网页中使用matplotlib 二、如何使用mpld3在网页中显示图表 三、如何使用matplotlibflask在网页中显示图表 一、如何在网页中使用matplotlib Matplotlib是Python中一个非常流行的可视化库。然而&#xff0c;Matplotlib主要是为桌面应用程序设计的&#xff0c;…

初识java--javaSE(3)--方法,递归,数组,

文章目录 一 方法的使用1.1 什么是方法&#xff1f;main方法注意事项 1.2 方法的调用嵌套调用在方法调用时形参与实参的关系&#xff1a; 1.3 方法的重载方法重载的意义&#xff1f;总结方法重载&#xff1a;方法签名&#xff1a; 二 递归什么是递归&#xff1f;递归的精髓&…

BUU-[GXYCTF2019]Ping Ping Ping

考察点 命令执行 题目 解题 简单测试 ?ip应该是一个提示&#xff0c;那么就测试一下?ip127.0.0.1 http://0c02a46a-5ac2-45f5-99da-3d1b0b951307.node4.buuoj.cn:81/?ip127.0.0.1发现正常回显 列出文件 那么猜测一下可能会有命令执行漏洞&#xff0c;测试?ip127.0.…

Github图片显示不出来?两步解决!

很多同学可能和我一样&#xff0c;在GitHub中找一些项目或者资料的时候&#xff1b;总是会看到一些图片显示不出来&#xff0c;或者数学公式乱码&#xff1a; 比如这样 还有这样 其实这个主要是因为DNS污染导致的&#xff0c;具体大家可以百度&#xff0c;这边不详细介绍。 解决…

libcity笔记:

1 __init__ 2 encode 得到的内容如下&#xff1a; data_feature的内容&#xff1a; 一共有多少个location1【包括pad的一个】最长的时间间隔&#xff08;秒&#xff09;最长的距离间隔&#xff08;千米&#xff09;多少个useer idpadding 的locationidpad_item的内容 location…

ppt---C语言

注意某些符号和我们手写的不一样&#xff08;&#xff09;乘法&#xff0c;除法等

实现桌面动态壁纸——认识 WebView2 控件

目录 前言 一、什么是 WebView2 &#xff1f; 二、使用示例存储库 2.1 下载存储库 2.2 编译解决方案项目文件 2.3 运行示例程序 三、如何修改 WebView2 示例 本文来源于&#xff1a;https://blog.csdn.net/qq_59075481/article/details/138637909。 前言 上一节我们讲…

05-10 周五 FastBuild 容器启动引起超时问题定位与解决

05-10 周五 FastBuild 容器启动超时问题 时间版本修改人描述2024年5月11日16:45:33V0.1宋全恒新建文档2024年5月11日22:37:21V1.0宋全恒完成解决方案的撰写&#xff0c;包括问题分析&#xff0c;docker命令 简介 关于FastBuild的优化&#xff0c;已经撰写了多个博客&#xff0…

书生浦语训练营第四次课作业

基础作业 环境配置 拷贝internlm开发机内的环境 studio-conda xtuner0.1.17# 激活环境 conda activate xtuner0.1.17 # 进入家目录 &#xff08;~的意思是 “当前用户的home路径”&#xff09; cd ~ # 创建版本文件夹并进入&#xff0c;以跟随本教程 mkdir -p /root/xtuner0…