首页 > 编程语言 >必知必会:Java基础

必知必会:Java基础

时间:2023-06-18 20:33:41浏览次数:49  
标签:Java 克隆 必知 数据类型 对象 必会 序列化 Class

  • 创建对象有几种方式

(1)new创建对象;
(2)反射创建对象;
(3)采用clone机制;
(4)序列化机制。

  • 创建反射对象的几种方式

(1)类.class:通过 类名.class 创建反射获取对象; 类.class 是静态加载,是JVM编译时就要加载。

Class<ClassDemo> oClass = ClassDemo.class;

(2) object.getClass() :以 实例对象.getClass() 的形式获取对象; getClass() 是一个对象实例的native方法。

Class bClass = this.getClass();

(3) Class.forName() :创建反射获取对象

Class aClass = Class.forName("com.basic.reflect.ClassDemo");

(4) this.getClass().getClassLoader().loadClass("类全路径") :通过类加载器获取对象

Class lClass = classLoader.loadClass("com.basic.reflect.ClassDemo");
ClassDemo c4 = (ClassDemo) lClass.newInstance();

上述几种写法都是获取一个实例对象或该类在内存中的实际类型。
上述几种写法都可以调用 newInstance() 实例化来获取实例对象。
如果在Spring容器中,可以从上下文容器中获取bean对象:

ApplicationContext.getBean(Class<T> var1); 
  • 浅克隆和深克隆

(1)浅克隆:只拷贝基本数据类型变量的值,引用数据类型变量是取地址值,不会拷贝引用类型变量指向的堆中的对象。
怎么实现浅克隆?
第一种方案:Object类提供了clone()方法,可以实现对对象的浅克隆。

protected native Object clone() throws CloneNotSupportedException;


第二种方案: BeanUtils#copyProperties ,实现是使用的反射完成的浅克隆。

org.springframework.beans.BeanUtils#copyProperties(java.lang.Object, java.lang.Object);

(2)深克隆:完全拷贝一个对象,不仅拷贝基本数据类型变量的值、引用数据类型变量的值也要层层拷贝。
怎么实现深克隆?
第一种方案:重写 clone() 方法,对于引用数据类型变量层层递归。
第二种方案:先将原对象序列化,再反序列化成克隆对象。

  • 序列化和反序列化

序列化:把Java对象转为二进制流。
反序列化:把二进制流转为Java对象。
注意:
(1)对于可能存在序列化的JavaBean类,建议实现 Serializable ;不然可能有些序列化场景报错。
(2) 如果存在不想序列化的变量,请使用 transient 修饰。

有哪些序列化方式?
(1)Java对象序列化:使用InputStream流和OutputStream流进行转化。
(2)Json序列化:使用fastjson包来操作。
(3)Protocal Buffers(简称ProtoBuf)序列化:是谷歌的一项技术,ProtoBuf生成的是字节码,是一种轻便高效的结构化数据存储格式。

标签:Java,克隆,必知,数据类型,对象,必会,序列化,Class
From: https://www.cnblogs.com/scorpio-cat/p/17489701.html

相关文章

  • java--多态
       ......
  • 基于JAVA物品租赁系统设计与实现
    物品租赁市场像是一块大蛋糕,现在网络购物趋势发展势头迅猛,网上物品租赁的市场开拓现在也在发展中,任何商家都需要抢占先机,开拓网上物品租赁市场,抢占网上交易市场份额。 所以本人设计了物品租赁系统,实现网上的物品租赁。根据本系统的研究现状和发展趋势,系统从需求分析、结构设计、数......
  • 基于JAVA公交路线查询系统
    进入21世纪以来,计算机通讯得到迅速发展,计算机的信息技术全面地普及到人类社会的各个方面,信息化成为世界经济和社会发展的大趋势。随着信息时代的发展,快捷高效的处理信息已成为各行各业的基本需求。在公交路线查询系统中,为满足其系统化,自动化,高效化的要求,需要设计一个有效的公交路......
  • 基于JAVA佳乐福购物商城系统
    随着传统的购物方式正在向网络化发展,出现了“网购”这种越来越受欢迎的新型消费方式。为了提高商品业务水平和效率,实现比电话订购更有效的销售业务,佳乐福购物商城应运而生。通过对购买商品流程和业务进行全面考察分析,结合目前最先进的软件开发技术,实现了购买商品的网络化管理。目前......
  • 基于JAVA物品租赁系统设计与实现
    物品租赁市场像是一块大蛋糕,现在网络购物趋势发展势头迅猛,网上物品租赁的市场开拓现在也在发展中,任何商家都需要抢占先机,开拓网上物品租赁市场,抢占网上交易市场份额。 所以本人设计了物品租赁系统,实现网上的物品租赁。根据本系统的研究现状和发展趋势,系统从需求分析、结构设计、数......
  • java--继承
       ......
  • 基于JAVA路障维修系统的设计与实现
    路障维修系统的设计与实现开发对提高期工作的效率和质量具有重要意义。本文从路障跟踪与维修系统的作用出发,详细阐述了路障跟踪与维修系统的用户部分和施工队部分开发、操作流程和涉及的一些关键技术。本文首先进行了项目概述,简单介绍了项目开发的背景、目的及意义,明确了路障跟踪与......
  • Java:使用bcrypt对密码加密和验证
    文档https://mvnrepository.com/artifact/org.mindrot/jbcrypthttp://www.mindrot.org/projects/jBCrypt/依赖<dependency><groupId>org.mindrot</groupId><artifactId>jbcrypt</artifactId><version>0.4</version><......
  • JavaScript-Vue
    2Vue2.1Vue概述通过我们学习的html+css+js已经能够开发美观的页面了,但是开发的效率还有待提高,那么如何提高呢?我们先来分析下页面的组成。一个完整的html页面包括了视图和数据,数据是通过请求从后台获取的,那么意味着我们需要将后台获取到的数据呈现到页面上,很明显,这就需要我们使......
  • Java集合框架常见面试题
    剖析⾯试最常⻅问题之Java集合框架集合概述Java集合概览从下图可以看出,在Java中除了以Map结尾的类之外,其他类都实现了Collection接⼝。并且,以Map结尾的类都实现了Map接⼝。说说List,Set,Map三者的区别?List(对付顺序的好帮⼿):存储的元素是有序的、可重复的......