首页 > 编程语言 >Java面试八股文01-基础部分

Java面试八股文01-基础部分

时间:2024-03-14 15:23:07浏览次数:36  
标签:01 八股文 clone address Person Address Java 拷贝 public

Java文件执行流程

  • 编译:将.java文件编译为虚拟机可以识别的.class字节码文件
  • 解释:虚拟机执行java字节码文件,将其转化为机器可以执行的机器码
  • 执行:机器执行机器码

面向对象的三大特性

  • 封装
  • 继承
  • 多态

深拷贝和浅拷贝

  • 浅拷贝代码举例
public class Person implements Cloneable {
    private Address address;

    public Person(Address address){
        this.address = address;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}
public class Address implements Cloneable{
    private String name;

    public Address(String name){
        this.name = name;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}
public static void main(String[] args) throws CloneNotSupportedException {
        Person person1 = new Person(new Address("北京"));
        Person person2 = (Person)person1.clone();
        System.out.println(person1 == person2); //false
        System.out.println(person1.getAddress() == person2.getAddress()); //true
    }

浅拷贝之后对象重新拷贝了一份,但是在对象里面的引用并没有重新拷贝

  • 深拷贝代码举例
public class Address implements Cloneable{
    private String name;

    public Address(String name){
        this.name = name;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

public class Person implements Cloneable {
    private Address address;

    public Person(Address address){
        this.address = address;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        try {
            Person person = (Person) super.clone();
            person.setAddress((Address) person.getAddress().clone());
            return person;
        } catch (CloneNotSupportedException e) {
            throw new AssertionError();
        }
    }
}
public static void main(String[] args) throws CloneNotSupportedException {
        Person person1 = new Person(new Address("北京"));
        Person person2 = (Person)person1.clone();
        System.out.println(person1 == person2); //false
        System.out.println(person1.getAddress() == person2.getAddress()); //false
    }

深拷贝不仅仅拷贝了对象,还拷贝了对象里面的引用,此外深拷贝还可以使用序列化方式进行拷贝

  • 另外还有一种引用拷贝,就是直接引用使用的对象,即直接指向该对象堆中的地址,不进行拷贝

hashCode()和equals()

每个对象都有一个hashCode,相同对象的hashCode肯定是一样的,所以可以使用hashCode来判断对象是否相等来提高判断效率,但是也有小概率不同的对象的hashCode也是相同的,所以要使用equals来保证判断对象完整与否的准确性,在使用过程中,首先使用hashCode,如果hashCode不相等,那么他们绝对不是相同的,如果他们相等,则会再使用equals来判断这两个对象是否相等

String重点问题

标签:01,八股文,clone,address,Person,Address,Java,拷贝,public
From: https://www.cnblogs.com/zwmBlog/p/18072928

相关文章

  • Java登陆第三十五天——VUE初始页面解析
    Vite创建的默认Vue3项目中package.json文件信息如下:{"name":"vmoudle1","private":true,"version":"0.0.0","type":"module","scripts":{"dev":"vite",......
  • 身份证查询-身份认证-javascript实名认证接口
    翔云身份证实名认证接口将与网络平台携手共筑信息安全防线,守护每一笔交易的真实可信,助力您的企业在数字化浪潮中稳健前行!以下是javascript语言调用翔云身份证实名认证API的代码:varform=newFormData();form.append("img","/9j");form.append("key","M***********g");fo......
  • XM22010-3直流电源设备:开启高效稳定供电
    XM22010-3直流电源设备:稳定输出,高效供电新典范在直流电源领域,稳定、高效的供电设备是确保各类电子设备正常运行的关键。XM22010-3直流电源设备以其出色的稳定性和高效性,成为市场上的佼佼者。XM22010-3直流电源设备采用了先进的电源转换技术和智能控制算法,能够实现稳定、连续......
  • Java登陆第三十五天——Vite+Vue3目录结构、.vue文件理解(SFC)
    项目结构使用Vite创建Vue3+JS默认项目结构如下:(vmoudle1是项目名)Vue中提出了组件的概念。组件是代码复用的一种方式,用于抽象出一个可复用的UI,方便在不同的场景中进行重复使用。组件根据大小可被分为:(从小到大)1.组件2.布局组件3.页面级别组件.vscode忽略node......
  • 精通Spring Boot单元测试:构建健壮的Java应用
    引言:在当今软件开发领域,单元测试已经成为确保应用质量和可维护性的关键步骤。特别是在Java生态系统中,SpringBoot框架作为一种广泛应用的解决方案,其对于单元测试的支持更是让开发者受益匪浅。本博客的目标是为开发者提供一份清晰易懂的指南,帮助他们利用SpringBoot框架构建......
  • Java复习第二天学习笔记,附有道云笔记链接
    【有道云笔记】二3.13https://note.youdao.com/s/RWOQv0g一、运算符1.基本运算符+-*/@Testpublicvoidtest2(){System.out.println("运算符.test2");//双目运算符intnum1=3,num2=5;intresult=num1+num2;System.out.println(result);System.out.prin......
  • java毕设安卓基于Android的志愿者服务系统(开题+源码)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景在当今信息化社会,移动互联网技术的迅猛发展正深刻改变着人们的生活方式。特别是在社会公益领域,志愿者服务作为社会文明进步的重要标志,其组织与管......
  • 04 games101-变换(模型、视图、投影)
    04变换(模型、视图、投影)MVP变换MVP变换用来描述视图变换的任务,即将虚拟世界中的三维物体映射(变换)到二维坐标中。MVP变换分为三步:●模型变换(modeltranformation):将模型空间转换到世界空间(找个好的地方,把所有人集合在一起,摆个pose)●摄像机变换(viewtranformation):将......
  • 06 games101-光栅化(深度测试与抗锯齿)
    06光栅化(深度测试与抗锯齿)从采样分析走样采样的对象:●在位置上采样——照片●在时间上采样——视频以下副标题均是在时域上分析。采样的瑕疵(Artifacts)Artifacts(Erros/Mistakes/Inaccuracies)●锯齿●摩尔纹●车轮效应●…走样的原因信号频率太快,采样太......
  • 05 games101-光栅化(三角形的离散化)
    05光栅化(三角形的离散化)三角形三角形的性质和优点:●最基础的多边形●其他图形可以拆解为三角形●三角形内一定是平面●内外的定义很明确●定义三个顶点后,三角形内可以插值光栅化(Rasterization)光栅化关键:判断一个像素和三角形的位置关系(像素中心点与三角形的位......