2023-05-22 题目

2023-10-26

1、java的泛型

泛型是jdk 5 引入的,泛型就是:引用类型作为参数,本质就是参数化类型;

1)、类型擦除:

java的泛型基本上都是在编译器这个层次来实现的,在生成的字节码文件中是不包含泛型类中的信息的,泛型参数在编译的时候被去掉的过程叫做类型擦除。举例:在代码中的定义的List类型,编译成字节码文件之后,jvm看到的就是List,泛型的参数信息是看不到的。

    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        //    泛型
        List<Integer> list = new ArrayList<>();
        list.add(1);
        System.out.println(list);

        Class<? extends List> aClass = list.getClass();
//        查找add方法
        Method add = aClass.getDeclaredMethod("add", Object.class);
//        通过反射添加值
        Object k1 = add.invoke(list, "k1");
        System.out.println("添加之后的值");
        System.out.println(list);
    }

输出如下所示:

[1]
添加之后的值
[1, k1]

我们在编译的时候添加,肯定是报错的,但是编译之后,就可以通过反射来添加

2)、常用的通配符:

  • ?表示不确定的java类型
  • T(type)表示具体的一个java类型
  • K 和V(key value)表示java中的key和value
  • E(element) 代表Element
  • <? extends List> 表示: 该通配符代表的类型是List的子类
  • <? super T> 表示:该通配符的类型是T类型的父类

3)、泛型的三种方式

1、泛型类

/**
 * 泛型例子
 *
 * @author LZH
 * @version 1.0
 * @date 2023/05/22 19:24:08
 */
public class Generic<T>{
    private T key;

    public void Generic(T key){
        this.key = key;
    }
    public T getKey(){
        return  key;
    }
}

实例化泛型类:

Generic<Integer> aa = new Generic<Integer>(23456);

2、泛型接口

public interface Test<T>{
    public T method();
}

实现:

不指定类型

public class bb<T> implements Test<T>{
	@override
    public T method(){
        return null;
    }
} 

指定返回类型:

public class bb<T> implements Test<String>{
	@override
    public String method(){
        return "hello";
    }
} 

3)、泛型的方法:

 public static < E > void printArray( E[] inputArray )
     //打印数组的内容
     {
     for ( E element : inputArray ){
     System.out.printf( "%s ", element );
     }
 }

2、深拷贝和浅拷贝

浅拷贝:对基本数据类型进行值传递,对引用类型进行引用类型般的拷贝。(在引用类型时,定义了一个变量指向这个对象)

深拷贝:对基本数据类型进行值传递,对引用类型,创建一个新的对象,赋值其中的内容,叫做深拷贝。(赋值了一个新的对象)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T0AlHiHM-1684762610187)(E:2.png)]

3、java中只有值传递

  • 值传递不会改变原来值;
public static void main(String[] args) {
    int a  = 10;
    int b = 20;
    changeNum(a,b);
    System.out.println("a的值:"+a);
    System.out.println("b的值:"+b);
}
static void changeNum(int num1,int num2){
    int temp = num1;
    num1 = num2;
    num2 = temp;

    System.out.println("num1的值:"+num1);
    System.out.println("num2的值:"+num2);

}

结果:

num1的值:20
num2的值:10
a的值:10
b的值:20
  • 引用传递
    public static void main(String[] args) {
        Person person = new Person();
        person.setAge("10");
        person.setName("小明");
        changePerson(person);
        System.out.println(person);
    }
    static void changePerson(Person person){
        person.setName("小红");
        person.setAge("16");
        System.out.println(person);
    }

结果:

Person(name=小红, age=16)
Person(name=小红, age=16)

引用传递:传递的是对象的引用变量,由于每个变量都是指向这个对象的,操作对象的值,会导致其他的变量也会变,这是因为改变了本质。

总结:

  • 一个方法不能修改一个基本数据类型的参数(即数值型或布尔型)。
  • 一个方法可以改变一个对象参数的状态。
  • 一个方法不能让对象参数引用一个新的对象。

4、复制的几种方法

1、直接赋值

复制的是引用的变量;

    public static void main(String[] args) {
        Person person = new Person();
        person.setAge("10");
        person.setName("小明");
        Person person1 = person;
        System.out.println(person ==person1);
    }

2、clone一个对象

package com.lzh.interviewquestions.entity;

import lombok.Data;

/**
 * 实体类
 *
 * @author LZH
 * @version 1.0
 * @date 2023/05/22 20:24:17
 */
@Data
public class Person {
    private String name;
    private String age;

    public Person getCloned(Person person) throws CloneNotSupportedException {
        return (Person) person.clone();
    }

}

    public static void main(String[] args) throws CloneNotSupportedException {
//        ______________________________
//        Person person = new Person();
//        person.setAge("10");
//        person.setName("小明");
//        Person person1 = person;
//        System.out.println(person ==person1);
//        -----------------------
        Person person = new Person();
        person.setAge("10");
        person.setName("小明");
        Person person1 =  person.getCloned(person);
        System.out.println(person1 == person);
        System.out.println("到哪里了");
        System.out.println(person1.getName()==person.getName());
        // 也是浅拷贝
        Person person = new Person();
        person.setAge("10");
        person.setName("小明");
        Person person1 = new Person();
        BeanUtils.copyProperties(person,person1);
        System.out.println(person.getName() == person1.getName());
    }

​ clone一个对象是两个地址确实不一样,但是里面的属性对应的值是一样的

3、深拷贝一个对象 实现Cloneable接口

public class Person implements Cloneable {
    private String name;
    private String age;

    public Person(String name, String age) {
        this.name = name;
        this.age = age;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return new Person(this.name, this.age);
    }
}

// 使用
Person person1 = new Person("小明", "20");
Person person2 = (Person) person1.clone();

序列化(将对象进行序列化,然后再反序列化成新的对象。)

public static <T> T deepClone(T obj) throws IOException, ClassNotFoundException {
    ByteArrayOutputStream bo = new ByteArrayOutputStream();
    ObjectOutputStream oo = new ObjectOutputStream(bo);
    oo.writeObject(obj);

    ByteArrayInputStream bi = new ByteArrayInputStream(bo.toByteArray());
    ObjectInputStream oi = new ObjectInputStream(bi);
    return (T) oi.readObject();
}

// 使用
Person person1 = new Person("Tom", "20");
Person person2 = deepClone(person1);

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2023-05-22 题目 的相关文章

  • Zuul不转发请求到其他微服务

    我正在使用 Spring Boot 微服务 我已经配置了 eureka zuul 代理和另一个微服务 帐户 如果我直接从帐户拨打电话 则工作正常 帐户和 zuul 服务器都显示在 eureka 上 当我尝试使用 zuul 代理进行访问时 它
  • SpringMVC 和 Hibernate:CannotCreateTransactionException:无法打开 Hibernate 会话进行事务;

    我正在尝试设置并Spring MVC 休眠项目 但它让我发疯 我还会考虑订购 xml 配置文件的建议 我有以下文件 web xml
  • Java 访问被拒绝

    C Program Files x86 Java jdk1 6 0 17 bin gt javac VendingMachine java VendingMachine java 27 error while writing Vending
  • 高负载应用程序的数据库可扩展性?

    我见过一些应用程序拥有集群 Web 服务器 例如 10 到 20 个服务器 以具有可扩展性 可以在其中分发 在网络服务器之间加载 但我总是看到所有网络服务器都使用单个数据库 现在考虑任何电子商务或铁路 Web 应用程序 其中有数百万用户在任
  • 转换为 JSON 后保留 XMLGregorianCalendar 日期格式 - Jackson Lib

    我有一个对象 它有 2 个 XMLGregorianCalendar 对象 一个用于日期 另一个用于时间 我使用 Jackson 对象映射器将日期转换为 JSON 格式 转换前的日期为2014年2月10日 时间为11 15 00 转换为 J
  • 原型 Bean 未按预期自动装配

    测试控制器 java RestController public class TestController Autowired private TestClass testClass RequestMapping value test me
  • 如何设置Java线程的CPU核心亲和力?

    我搜索了以前关于类似主题的帖子 但找不到合适的答案 因此提出这个问题 非常感谢您帮助回答 我知道在 Linux 中通过任务集命令设置进程与特定 CPU 核心的关联性 但我想设置 Java 线程与特定 cpu 核心的亲和力 以便属于同一进程的
  • 有没有办法在@Service上使用@ControllerAdvice

    我有一个项目需求 但我没有任何需求 Controller or RestController但我需要为我的服务层提供一个全局异常处理程序 所以我需要配置 ControllerAdvice on Service 请告诉我是否还有其他方法可以做
  • 从两个数组中查找公共文件

    我正在尝试从两个数组中查找通用名称文件 我已将两个不同文件夹的文件名保存在两个不同的数组中 现在我正在创建一个通用文件数组 其中包含具有通用名称的文件 filenames 1 包含文件夹 1 中文件名称的数组 filename2 包含文件夹
  • Java检测音频文件(mp3)

    我有这段代码可以读取 mp3 文件 import java io File import java io IOException import javax sound sampled AudioSystem import javax sou
  • 无法安装 JDK 9,因为“另一个 Java 安装正在进行中”

    我已经在 Windows 10 x64 上使用 JDK 9 一段时间了 但是当我去安装最新的早期版本 b174 时 我首先卸载了以前的版本 像往常一样 然后运行新的安装程序 它失败并显示一个消息框 显示 另一个 Java 安装正在进行中 您
  • Java DocumentBuilder - XML 文件中的缩进错误

    我尝试使用 DocumentBuilder 用 Ja va 编写一个简单的 XML 文件 我期望 XML 文件如下所示
  • 在 Tomcat 中触发内部 ServletRequest

    我正在使用 Quartz 来安排 Web 应用程序的后台任务 其中一些任务只是针对同一 Web 应用程序发出请求 我想避免依赖于任何类型的网络设置 例如 如果从数据中心内发出带有我自己域名的请求 则可能无法正确路由 是否有一个 Java A
  • 错误:找不到符号 ArrayList

    我正在尝试创建某种列表来存储数组 表 中的值 我在这里使用数组列表 但我应该使用列表吗 但是 每次我尝试编译时 它都会引发以下错误 找不到标志 符号 ArrayList类 位置 玩家类 TablePlayer 代码如下 public cla
  • 使用 Swift 在 iOS 和 Android 之间共享核心代码

    我想要的是 使用 Swift 在 Android 和 iOS 之间共享非 UI 代码 问题 Android 具有 NDK 支持 允许您使用 Java 本机接口 JNI 运行 C 和 C 代码 不是 Objective C 我是一名Java程
  • Android 调整图片大小

    我的图像存储在 SD 卡上 每个大小约为 4MB 我想调整每个的大小 而不是将其设置为 ImageView 但我不能使用BitmapFactory decodeFile path 因为异常 java lang OutOfMemoryErro
  • java中的Anagram算法

    我想做字谜算法但是 这段代码不起作用 我的错在哪里 例如 des 和 sed 是字谜 但输出不是字谜 同时我必须使用字符串方法 不是数组 public static boolean isAnagram String s1 String s2
  • 在 Android 版 ORMLite 中加入类会引发 SQL 异常:找不到外部类,反之亦然

    我正在尝试使用 QueryBuilder 为两个不同的类创建一个联接查询 一个Product类和一个Coupon类 引用 Product 属性 storeId public class Coupon DatabaseField column
  • 如何从项目文件夹中的 jlabel 上设置图像?

    我正在尝试制作一个 Java 桌面应用程序 我想设置一个图像JLabel 我正在使用 NetBeans 从我的项目文件夹中 我的目录结构是 F gt MARKET src lib src defaultpackage demo java i
  • Java中不同格式的字符串解析为日期

    我想转换String to Date以不同的格式 例如 我从用户那里得到 String fromDate 19 05 2009 i e dd MM yyyy format 我想转换这个fromDate作为日期对象 yyyy MM dd fo

随机推荐

  • Qt实现十六进制接收文本和显示文本(可用于串口的十六进制)

    1 QTextEdit接收文本 QString str1 ui gt textEdit gt toPlainText QByteArray str2 QByteArray fromHex str1 toLatin1 data 按十六进制编码
  • VS Code 自动生成get-set方法

    在文档空白处右击 选择源代码操作 选择Generate Getters and Setters 选择要生成get set方法的属性 点击确定 生成成功
  • glTF格式介绍——目录

    最近因为科研需要 需要了解glTF文件结构 阅读了一下官方的文档 然后记录在这里写一个专栏吧 由于自己还是图形学小白 翻译的内容难免会有错误 希望大家见谅 此外 此专栏只翻译了主要部分 动画 蒙皮 材质三个部分因为个人知识的限制 暂时没有翻
  • Nas里搭建Frpc内网穿透客户端【超级无脑】

    接上篇 Linux搭建Frps内网穿透服务器端 搭建了一个Frps的服务端 建议也可以先去看下 这篇文章分享如何在群晖Nas里面搭建一个客户端 成功后 可以在远程把资料同步到自己的nas上 实现与百度网盘类似功能 又省去一笔 同时 用这种方
  • 图解Python,14张思维导图让你玩转Python

    Python的设计理念是 优雅 明确 简单 优雅 Python常被称为胶水语言 能够把用其他语言制作的各种模块很轻松地联结在一起 明确 Python运行速度非常快 用Python语言编写程序时 无需考虑诸如如何管理你的程序使用的内存一类的底
  • apache beam 入门之beam-sql

    目录 apache beam 个人使用经验总结目录和入门指导 Java 就像spark sql 一样 apache beam也有beam sql 就是能够输入1张模拟数据表 然后通过sql语句来实现计算 举个例子 我们不希望在数据源端执行
  • kafka面试题目

    kafka面试 一 Kafka中的ISR InSyncRepli OSR OutSyncRepli AR AllRepli 代表什么 二 Kafka中的HW LEO等分别代表什么 三 Kafka中是怎么体现消息顺序性的 四 Kafka中的分
  • 改写对象的行为—多态

    前言 多态 Polymorphism 按字面的意思就是 多种状态 在面向对象语言中 接口的多种不同的实现方式即为多态 引用Charlie Calverts对多态的描述 多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术 赋值之后
  • 成功解决curl: error while loading shared libraries: libssl.so.1.0.0: cannot open shared object file...

    最近在执行下述命令连接外网时 遇到了下述问题 求助多方后终于找到解决方法 很简单 未安装curl库 所以很简单 pip install curl 由于我这里已经安装过了 所以无需再安装 完美解决
  • echarts tooltip悬浮框内容显示不全,如何解决

    前言 项目使用echarts过程中 鼠标移上去 悬浮框显示的内容太多 导致显示不全 或者需要自定义显示内容时 如何解决 现在提供一个简单的方法 简单示例 代码如下 示例 tooltip trigger item enterable true
  • IDEA在MAC环境中的使用小技巧

    最近 转战MacOS的平台进行代码开发 有一天 突然发现 IDEA中同样启动一个springboot项目往往需要20多秒钟 如下截图中所示 这就让我感到比较奇怪了 因为本身机器配置也没那么差 关键 我同时还在WINDOWS平台上也正在对这个
  • 全能电子地图下载器-获取离线地图瓦片的工具

    百度网盘 1 9 5早期版本 链接 https pan baidu com s 1k9QL3mJXDus6O071HSBrHA 提取码 bib6 打开百度网盘并解压以后 你得到的东西是这些 3 0最新版本 链接 百度网盘 请输入提取码 提取
  • 竖式问题 rust解法

    竖式问题 输入一个数字集合 数字之间没有空格 找出所有形如abc de 三位数乘以两位数 的算式 在完整的竖式中 所有数字都属于这个数字集合 输出所有竖式 每个竖式前应有编号 之后应有一个空行 样例输入 2357 输出 lt 1 gt 77
  • python中add函数_如何使用python中的add函数?

    之前向大家介绍过python中的求和函数sum函数 numpy中的sum函数 对于数组可以指定维度进行相加 numpy中还有另一种求和运算方法 即add函数 add函数不仅作用于numpy中加法运算 还用于set中添加元素 本文主要向大家介
  • uniapp - APP云打包、蒲公英平台发布APP的步骤

    一 uniapp 云打包 1 注册 dcloud 开发者 首先需要注册一个 dcloud 开发者的账号 dcloud开发者中心 登录 dcloud net cn 根据流程注册即可 2 云打包 已安卓为例 项目创建完成后 查看 dcloud
  • Python连接Gbase数据库

    在数据清洗和计算方面 Python比SQL的灵活性更强 本文记录使用Python读取Gbase数据库中的数据 建立数据库连接 无论什么方法读取读取或操作数据库中的数据 首先要建立数据库连接对象 import pandas as pd imp
  • 如何学习python(附实际操作方法)

    人工智能在发展 Python作为人工智能的首选语言 自然也越来越火爆 现在 Python可以说是备受程序员欢迎的编程语言了 但是 有很多同学却不知道该从何处下手 接下来小编就跟大家聊聊吧 首先 我们要准备一台电脑 Windows7 10系统
  • parted3 Linux分区命令

    原贴地址 http www junfcom cn post 184 html Parted是一个着名的命令行工具 可以轻松管理硬盘分区 它可以帮助您添加 删除 缩小和扩展磁盘分区及其上的文件系统 从第一次出来 分手已经走了很长的路 其中一些
  • 谈谈管理者绩效管理要点

    作者 李石 链接 https www zhihu com question 19626322 answer 29165823 来源 知乎 著作权归作者所有 商业转载请联系作者获得授权 非商业转载请注明出处 在绩效管理中衡量一个管理者的绩效与
  • 2023-05-22 题目

    1 java的泛型 泛型是jdk 5 引入的 泛型就是 引用类型作为参数 本质就是参数化类型 1 类型擦除 java的泛型基本上都是在编译器这个层次来实现的 在生成的字节码文件中是不包含泛型类中的信息的 泛型参数在编译的时候被去掉的过程叫做