Java中各种对象的各种实例化方式
Java 中万物皆对象,Linux 中一切皆文件
先简单的说下对象的实例化过程:
- 首先我们要有个意识,就是创建一个类的实例化对象,内存中必须已经加载了这个类
- 所以,不论是 new 还是反射或是 Unsafe.allocateInstance(Class),都必须要先找到类对象的内存地址
- 然后知道类对象的结构,再去堆上申请新的空间,即实例化对象
- 顺带说下,Java 占内存的原因正是因为对象携带的信息很丰富
Object:万物源头
// new 隐式加载类到内存,再实例化对象
Object obj = new Object();// Unsafe.allocateInstance
Object obj = Unsafe.allocateInstance(Object.class);// 手动加载类
// Class.newInstance 是无参构造,最后调用的是 Constructor.newInstance (可带参构造)
Class<String> cls = Class.forName("java.lang.String");
String str = cls.newInstance();// 其它的还有序列化 clone
复制代码
基础类型的包装类: "="右边可以直接赋值
// 常量池中申请
String str = "string";// 虚拟机回调 Integer 的静态方法 valueOf(int i) 静态方法说明类已经被加载到内存了
Integer i = 100;
复制代码
数组:一切容器的基础
数组除了 new, 还可以用下面这个静态方法
// Array.newInstance 调用 native 方法 构造一个长度 16 的 int 数组
int[] o = (int[]) Array.newInstance(int.class, 16); // 一维
// 以下都是可以成功构造的 无非是数组嵌套数组
// int[][] o = (int[][]) Array.newInstance(int[].class, 16); // 二维
// int[][][] o = (int[][][]) Array.newInstance(int[][].class, 16); // 三维
复制代码
如下图:
- 该方法还是有一些框架使用到的
- 对于传入的的类型和数组的维度是有限制的,维度限制可能和 byte 有关吧
总结一下
不论是以哪一种方式去实例化对象,我们要明白的是,实例化一个对象之前,内存中必须要有一个类对象,或者说 Class 被加载到内存
转载于:https://juejin.im/post/5d01ac86f265da1baa1e6d9a
Java中各种对象的各种实例化方式相关推荐
- java中产生对象的两种方式
/** 普通new对象的过程!*/Person pp = new Person();System.out.println(pp);/** 利用代用参数的构造器产生对象实例!* 首先获得相应带参数的构造 ...
- Java中,一切皆是对象——java中的对象类型与基本数据类型的区别
起因:取一个list给另一个list赋值,然后在另一个list中取出进行修改.list其中类型为对象时,String时,基本数据类型时. [java中的对象类型与基本数据类型的区别] #声明和实例化 ...
- Java中的对象和类
一. OOP中的基本概念 Java的编程语言是面向对象的,采用这种语言进行编程称为面向对象编程(Object-Oriented Programming, OOP), 它允许设计者将面向对象设计 ...
- Class java用法,java中Class的三种实例化
1.调用Object类中的getClass()方法:import java.util.Date; public class ReflectTest3 { public static void main ...
- java 监控对象是什么_多线程-Java中的对象监视器是什么意思? 为什么要使用这个词?...
多线程-Java中的对象监视器是什么意思? 为什么要使用这个词? 在阅读有关Java线程的文章时,我经常注意到这样的表达:"当前线程是该对象的监视器的所有者". 我的意思是:线程有 ...
- java中给对象的List集合去重的几种方法(Lambda)
java中给对象的List集合去重的几种方法 前言 一.lambda表达式的去重方式 二.Stream API中的collect去重方法 三.Stream API 中的distinct方法去重 前言 ...
- Java中的对象类型像引用还是指针,谁是谁非?
Java中的对象类型像引用还是指针,谁是谁非? 作者:海枫 地址:http://blog.csdn.net/linyt 作为一名程序员,我们应该对新知识和新技术刨根问底,而不应泛泛而谈.我未曾接触到J ...
- Java中实现接口的三种方式您造吗?
本文介绍了Java中实现接口的三种方式:常规实现方式.匿名内部类和 Lambda表达式实现方式.希望已经了解的同学可以重新温习一下,不了解的同学则从中受益! Java中接口最常规的实现方式 同学们都会 ...
- 深圳Java培训:Java中的对象流和序列化
深圳Java培训:Java中的对象流和序列化 最近,在讲流的使用,其中对象流的作用其实就是将自定义类的对象与流之间相互转换的流. 看起来还是挺简单的,那么看下面的例子: public class St ...
最新文章
- mariadb 内存占用优化
- java猜拳_求一个java猜拳游戏程序
- 06_一对一和一对多
- Matplotlib实例教程(五)绘制散点图
- selenium(2.4.0)中不能导出web drive 代码
- 人脸变形算法——MLS
- Linux入门笔记——文件操作命令2
- 安全策略_Spring Security 实战干货:如何实现不同的接口不同的安全策略
- 计算机网络有哪些技能知识,网络基础知识及操作技能.ppt
- 20145217 《信息安全系统设计基础》第0周学习总结
- 两级压缩机行业调研报告 - 市场现状分析与发展前景预测
- 点对点信道互连以太网实验_轩辕实验室┃SOTIF:汽车以太网容错能力测试(1)...
- 3Done第七课——马克杯设计
- 中国顶级黑客Top10,最后一位你猜是谁
- 汽车故障检测仪计算机教程,如何使用汽车故障诊断仪进行汽车维修
- 哈佛幸福课 24种人格力量测试
- layui导入模板数据_使用layui模板填充页面数据
- 20201114-三轴云台storm32 BGC HAKRC调试+
- 自动化运维初级村-Netmiko-巡检-2
- 苹果一直显示无法连接服务器,苹果6plus无法连接服务器是怎么回事?
热门文章
- harbor安装_Harbor任意管理员注册漏洞(CVE-2019-1609) (附:批量利用poc)
- 电脑底部任务栏点不动_虫洞 跨平台的电脑控制手机软件
- TCP实现多线程下文件的上传
- python编译成class_python class
- shell脚本面试题
- win台式找不到计算机管理,win10系统计算机右键-管理打不开windows找不到文件的解决方法...
- java中跳转页面的干法_java – 有没有一种干法来整合RowMappers的相同代码?
- 美国留学计算机网络技术,美国留学计算机专业详解
- 冷迁移oracle数据库,数据库的冷备份迁移
- 采用FTP协议实现文件的上传