首页 > 编程语言 >每天5道---Java⾯试题(第一天)

每天5道---Java⾯试题(第一天)

时间:2023-11-03 14:04:17浏览次数:37  
标签:short Java 试题 int s1 --- 对象 类型 public

第⼀章:Java基础

1.1、⾯向对象的三个基本特征?

⾯向对象的三个基本特征是:封装、继承和多态。

继承:让某个类型的对象获得另⼀个类型的对象的属性和⽅法。继承就是⼦类继承⽗类的特征和⾏

为,使得⼦类对象(实例)具有⽗类的实例域和⽅法,或⼦类从⽗类继承⽅法,使得⼦类具有⽗类相

同的⾏为。

封装:隐藏部分对象的属性和实现细节,对数据的访问只能通过外公开的接⼝。通过这种⽅式,对象

对内部数据提供了不同级别的保护,以防⽌程序中⽆关的部分意外的改变或错误的使⽤了对象的私有

部分。

多态:对于同⼀个⾏为,不同的⼦类对象具有不同的表现形式。多态存在的3个条件:1)继承;2)

重写;3)⽗类引⽤指向⼦类对象。

举个简单的例⼦:英雄联盟⾥⾯我们按下 Q 键这个动作:

• 对于亚索,就是斩钢闪

• 对于提莫,就是致盲吹箭

• 对于剑圣,就是阿尔法突袭

同⼀个事件发⽣在不同的对象上会产⽣不同的结果。

下⾯再举个简单的例⼦帮助⼤家理解,这个例⼦可能不是完全准确,但是依然是可以帮助我们理解的。

public class Animal { // 动物
public void sleep() {
System.out.println("躺着睡");
}
}
class Horse extends Animal { // ⻢ 是⼀种动物
public void sleep() {
System.out.println("站着睡");
}
}
class Cat extends Animal { // 猫 是⼀种动物
private int age;
public int getAge() {
return age + 1;
}
@Override
public void sleep() {
System.out.println("四脚朝天的睡");
}
}

在这个例⼦中:

House 和 Cat 都是 Animal,所以他们都继承了 Animal,同时也从 Animal 继承了 sleep 这个⾏为。

但是针对 sleep 这个⾏为,House 和 Cat 进⾏了重写,有了不同的表现形式(实现),这个我们称为多态。

在 Cat ⾥,将 age 属性定义为 private,外界⽆法直接访问,要获取 Cat 的 age 信息只能通过 getAge

⽅法,从⽽对外隐藏了 age 属性,这个就叫做封装。当然,这边 age 只是个例⼦,实际使⽤中可能是

⼀个复杂很多的对象。


1.2、访问修饰符public,private,protected,以及不写(default)时的区别?

类的成员不写访问修饰符默认为default,默认对于同⼀个包的其他类相当于公开(public),对于不

是同⼀个包的其他类相当于私有(private)。

受保护(protected)对⼦类相当于公开,对于不是同⼀个包没有⽗⼦关系的类相当于私有。

Java中,外部类的修饰符只能是public或默认,类的成员(包括内部类)的修饰符可以是以上四种。

1.3、下⾯两个代码块能正常编译和执⾏吗?

// 代码块1
short s1 = 1; s1 = s1 + 1;
// 代码块2
short s1 = 1; s1 += 1;

代码块1编译报错,错误原因是:不兼容的类型: 从int转换到short可能会有损失”。

代码块2正常编译和执⾏。

我们将代码块2进⾏编译,字节码如下:

public class com.joonwhee.open.demo.Convert {
public com.joonwhee.open.demo.Convert();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: iconst_1 // 将int类型值1⼊(操作数)栈
1: istore_1 // 将栈顶int类型值保存到局部变量1中
2: iload_1 // 从局部变量1中装载int类型值⼊栈
3: iconst_1 // 将int类型值1⼊栈
4: iadd // 将栈顶两int类型数相加,结果⼊栈
5: i2s // 将栈顶int类型值截断成short类型值,后带符号扩展成int类型值⼊栈。
6: istore_1 // 将栈顶int类型值保存到局部变量1中
7: return
}

可以看到字节码中包含了 i2s 指令,该指令⽤于将 int 转成 short。

i2s 是 int to short 的缩写。

其实,s1 += 1 相当于 s1 = (short)(s1 + 1),有兴趣的可以⾃⼰编译下这两⾏代码的字节码,你会发现是⼀摸⼀样的。

说好的 Java 基础题,怎么⼜开始变态起来了???

1.4、基础考察,指出下题的输出结果

public static void main(String[] args) {
Integer a = 128, b = 128, c = 127, d = 127;
System.out.println(a == b);
System.out.println(c == d);
}

答案是:false,true。

执⾏ Integer a = 128,相当于执⾏:Integer a = Integer.valueOf(128),基本类型⾃动转换为包装类 的过程称为⾃动装箱(autoboxing)。

public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}

在 Integer 中引⼊了 IntegerCache 来缓存⼀定范围的值,IntegerCache 默认情况下范围 为:-128~127。

本题中的 127 命中了 IntegerCache,所以 c 和 d 是相同对象,⽽ 128 则没有命中,所以 a 和 b 是不 同对象。

但是这个缓存范围时可以修改的,可能有些⼈不知道。可以通过JVM启动参数:

-XX:AutoBoxCacheMax=<size> 来修改上限值,如下图所⽰:

每天5道---Java⾯试题(第一天)_Java面试

1.5、⽤最有效率的⽅法计算2乘以8?

2 << 3。(左移 相当于乘以2的⼏次幂 n << m 相当于n乘2的m次幂)

进阶:通常情况下,可以认为位运算是性能最⾼的。但是,其实编译器现在已经“⾮常聪明了”,很多指令编译器都能⾃⼰做优化。所以在实际实⽤中,我们⽆需特意去追求实⽤位运算,这样不仅会导

致代码可读性很差,⽽且某些⾃作聪明的优化反⽽会误导编译器,使得编译器⽆法进⾏更好的优化。

部分资料来源于网络,若发现知识点错误请您及时指出,谢谢!

标签:short,Java,试题,int,s1,---,对象,类型,public
From: https://blog.51cto.com/kongxiaolong/8164459

相关文章

  • Tacotron-WaveRNN学习记录1
     最近在跑github的waveRNN实现,地址:GitHub-fatchord/WaveRNN:WaveRNNVocoder+TTS,记录一下学习过程..首先从github上将项目下载下来,想把模型跑起来很简单,不会遇到什么问题..作者给了预训练的模型,想要快速体验模型的话,直接调用quick_start.py程序就好了.想要自行训练模......
  • NU1102 找不到版本为(=5.0.0-dev)的包 Microsoft.NETCore.App.Host.win-x64
    异常: 原因:.NetCore3.0之后的版本,默认情况下项目在生成时,会自动生成与运行时版本相同的可执行文件(exe<Windows下>),它是需要对应版本的一个dotnet-apphost-pack包支持。  解决方法:1.下载安装dotnet-apphost-pack包 2.禁用生成可执行文件,只要.dll文件在项目文件.csp......
  • prometheus-webhook-dingtalk 报警模板
    moretemplate.tmpl{{define"__subject"}}[{{.Status|toUpper}}{{ifeq.Status"firing"}}:{{.Alerts.Firing|len}}{{end}}]{{end}}{{define"__alert_list"}}{{range.}}---**告警名称**:{{index.Annotations"ti......
  • PostgreSQL技术大讲堂 - 第32讲:数据库参数调整
     PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUGPG技术大讲堂。 第32讲:数据库参数调整 第32讲:11月04日(周六)19:30-20:30,......
  • Util应用框架基础(二) - 对象到对象映射(AutoMapper)
    本节介绍Util应用框架相似对象之间的转换方法.文章分为多个小节,如果对设计原理不感兴趣,只需阅读基础用法部分即可.概述现代化分层架构,普遍采用了构造块DTO(数据传输对象).DTO是一种参数对象,当WebAPI接收到请求,请求参数被装载到DTO对象中.我们需要把DTO对象转换成实体......
  • 图片预览功能实现,放大缩小(el-image-viewer)
    <template><div><divv-for="(item,index)inlist":key="index"class="box"><img:src="item"alt=""@click="onPreview(item)"/></div&......
  • 无涯教程-MongoDB - 简介
    MongoDB是一种面向文档的数据库管理系统,用C++等语言撰写而成,以解决应用程序开发社区中的大量现实问题。MongoDB由MongoDBInc.(当时是10gen团队)于2007年10月开发,2009年2月首度推出,现以服务器端公共许可(SSPL)分发。本教程适用于愿意通过简单的步骤学习MongoDB数据库的软件专业人员,它......
  • VMWare虚拟机-修改界面大小(麒麟系统)
    一、下载linux.iso1.下载地址:http://softwareupdate.vmware.com/cds/vmw-desktop/ws/15.5.1/15018445/windows/packages/2.解压后,VMWare添加镜像iso,然后重启虚拟机 3.找到VMwareTools-10.3.10-13959562.tar.gz压缩包并解压         4.执行文件lssudo......
  • 汇编-nop空操作
         ......
  • JAVA之反射机制
    反射的JAVA的一个重要的机制静态语言:在编译期间检查类型,所有的类型检查发生在编译时。变量的类型在编译时是已知的,不会随着程序运行时期的变化而变化。典型的静态语言包括Java、C#、C++等。动态语言:在运行时检查类型,类型检查发生在运行时。变量的类型可以在运行时随程序的执......