-
2018-05-04 11:02:34
在Java中,new操作符的本意是分配内存,new一个类就是把这个类实例化为对象。
程序执行到new操作符时,会根据new后面的类型分配相应的内存空间。接着调用构造函数,填充对象的各个域,这一步叫做对象的初始化。构造方法返回后,一个对象创建完毕,就可以把他的引用(地址)发布到外部,在外部就可以使用这个引用操纵这个对象。
更多相关内容 -
java 中 new 对象 与 直接 赋值的对象为何不一样。
2014-03-07 16:25:39在 java 开发中, 下面的代码 String a ="abc"; String b = new String("abc"); System.out.println(a==c); 这样打印出来的结果是"false " 这是为什么呢。 java 对对象的管理是维护一张 ...在 java 开发中, 下面的代码
String a ="abc";
String b = new String("abc");System.out.println(a==c);
这样打印出来的结果是"false "
这是为什么呢。
java 对对象的管理是维护一张 hashcode 内存表的。
但 第一行 String a = "abc" 时, java 虚拟机会先查看 栈内存是否
存在着一样内容的 变量, 如 果没有, 则在栈内存中开辟一个临时的栈内存, 用来
存储 a 的内存。 如果存在同样的内容, 则虚拟机开辟一个b 变量并将 b 的引用指向 a
所以我们用 System.out.println(a==c); 实际是比较其引用地址是否一样的。
第二句 String b = new String("abc"); 则是在 堆内存中开辟存储空间。
用 new 出来的空间, 交由虚拟机 动态回收.
因此这里的 比较引用就是 false 的。
内容的比较可以用 equals() 函数.
-
JAVA new对象过程
2019-05-06 10:52:05我们都知道,创建对象是由 new关键字调用构造方法 返回类实例。...1、 new 用到了Person.class,所以会先找到Person.class文件,并加载到内存中(用到类中的内容类就会被加载) 2、执行该对象的static代码块(...我们都知道,创建对象是由 new关键字调用构造方法 返回类实例。先实例化对象,再把对象初始化。
例如 : Person jack = new Person();
这句话到底做了什么事情呢 ? 其实就是讲对象的初始化过程。
- 1、 new 用到了Person.class,所以会先找到Person.class文件,并加载到内存中(用到类中的内容类就会被加载)
- 2、执行该对象的static代码块(静态初始块)。(如果有的话,给Person.class类进行初始化)
- 3、在堆内存中开辟空间,分配内存地址
- 4、在堆内存中建立对象特有属性,并进行默认初始化
- 5、对属性进行显示初始化(声明成员属性并赋值)
- 6、执行普通初始块
- 7、执行构造函数
- 8、将内存地址赋值给栈内存中的jack变量
-
java new对象的理解
2021-02-12 17:14:29new的解释java里的new的英文意思就是"新的"的意思。在JAVA里就是创建一个新的实例,或者说一个新的对象,一个普通类在...举例说明:Java中使用 new关键字 加上 构造方法,来创建一个对象,下面是一个名为Cat的类,pu...new的解释
java里的new的英文意思就是"新的"的意思。在JAVA里就是创建一个新的实例,或者说一个新的对象,一个普通类在没有实例化之前,就是new之前,它的属性,方法等等在内存中都是不存在的。只有使用new了以后,这个类的一些东西在内存中才会真的存在,也就是说只有new了之后,这个类才能用。
举例说明:
Java中使用 new关键字 加上 构造方法,来创建一个对象,下面是一个名为Cat的类,public class Cat { public Cat() { System.out.println("这是构造方法"); }}使用new + 构造方法 来创建一个对象。
那么也就是Cat c = new Cat();前半部分,Cat c 的意思是,在内存中分配一个变量,名字叫c,这个变量是Cat类型的 是想创建的类型;后半部分,new Cat(); 这就是new关键字和构造方法来创建一个对象是实际给的类型,Cat()是构造方法的名字。
想造出一个对象来,需要运用;new Cat(); 说明 new这个Cat类的一个对象,程序运行的时候,会调用构造方法Cat(),等这个构造方法执行完了,这个Cat类型的对象也就造出来了,真正的出现在内存当中了。
使用new关键字造出来的对象,被分配在内存的堆区(heap),而且等这个对象真正出来之后,还会做一件重要的事情:new关键字创建出一个对象之后,会把这个对象在内存中的地址返回,通过这个地址就可以找到这个对象。
那么上面的写法,Cat c = new Cat();意思就是说,把这个对象在内存中的地址 赋值 给变量c,这就是Java中引用概念,c就叫做引用,或者叫引用变量,或者直接叫变量,没问题,都是它;c的值就是一个内存地址,或者叫引用地址。
通过这个地址,就可以准确的找到刚才创建出来的对象,以后我们要使用这个对象做一些事情,调用此对象的方法什么的,都用过这个引用。
java的父类声明new子类对象 和子类声明new子类对象
父类名 a = new 子类名()
子类名 b = new 子类名()
a只能调用父类有的函数和属性,如子类有重写则会输出重写的。不能调用子类自己的函数和属性,除非用强转。如为静态的方法或属性则是父类的。
((子类) a).子类自己的方法;
((子类) a).子类自己的属性;
b可以调用父类的函数和属性也可以调用子类的函数和属性(子类有重写则会输出重写的)。如为静态的方法或属性则是子类的。
(父类属性一般都private,不能调用)
但是对构造函数的执行上二者是没有区别的。
作用:
这个父类引用可以指向任意一个子类对象,增加了灵活性,尤其是在作为参数传递给方法的时候。
java接口对象 = new 实现类 与 实现类 对象= new 实现类
接口类 a = new 实现类()
实现类 b = new 实现类()
和上面继承的规则一样
可以这样总结,在调用成员变量以及静态方法时,“编译看左边,运行看左边”,即程序编译时创建了一个Animal类型的对象,并且使用new Cat()对于这个Animal对象赋值,但最终得到的还是一个Animal类的对象,调用静态方法或变量只需要看“=”左边的Animal animal即可。
但是要调用非静态方法时,由于Animal类的对象是用Cat()来实例化的,这个非静态方法在运行时会被重写,从而输出子类中方法重写后的结果。这就是“编译看左边,运行看右边”。
作用
实例化对象调用方法,你就会发现使用接口 对象名 = new 类名; 方式实例化的对象只能调用接口中有的方法,而不能调用类中特有的方法。而使用类名 对象名 = new 类名;方式创建出来的对象可以调用所有的方法
使用接口编程的好处是统一规范化。
你会发现无论多少个实现类,无论这些实现类有什么不同,使用接口 对象名 = new 类名; 方式实例化对象都可以调用接口中定义的方法,
在使用的时候,好像区别都不大。实例化对象调用方法,你就会发现使用接口 对象名 = new 类名; 方式实例化的对象只能调用接口中有的方法,而不能调用类中特有的方法。而使用类名 对象名 = new 类名;方式创建出来的对象可以调用所有的方法
但要是我不止一个实现类呢?如果A有实现类 B C D E。
用类名 对象名2 = new 类名;来写的话,我们要写5次,创建5个对象,如果用接口回调,我们只需要:
A a = new B(); a.方法名();
a=new C(); a.方法名()........来实现多态。
使用接口编程的好处是统一规范化。你会发现无论多少个实现类,无论这些实现类有什么不同,使用接口 对象名 = new 类名; 方式实例化对象都可以调用接口中定义的方法。
但是
接口回调的最大作用并不仅仅是为了统一规范化。这里举个例子:
public classwork {public static voidmain(String[] args) {
Phone A= new ClassA(); //Phone是父类,ClassA是实现类
CallUp(A);
A= newClassB();
CallUp(A);
}public static voidCallUp(Phone phone) {
System.out.println(phone.call(phone.num));//num是父类的一个属性
};
上面这里,Phone是一个基类,它代表所有的手机。
而ClassA和ClassB代表不同的手机型号,当然还有很多诸如iphone啊华为啊,小米啊之类的接口实现类。
现在我有一个打电话的功能叫做CallUp(),如果我们使用(实现类 a =new 实现类())的写法,那每个手机型号,我都需要写一个CallUp的方法来接收我的手机,每个手机的打电话方式(方法)都得不到统一。
如果我们使用接口回调,那我不管你是什么手机,反正只要能实现打电话的就行,所有的手机类型都可以放在Phone phone里面,我就不需要写很多次方法,毕竟手机型号这么多,难道我还得每一个手机型号都为他写一个方法?
由此可见,接口回调(接口 a = new 接口),不仅仅是为了规范,他最致命的优点是可以统一化管理所有子类,只需要提供一个共有的方法
强制类型转换
原文链接:https://blog.csdn.net/qq_39309348/article/details/88061031
原文链接:https://blog.csdn.net/u012198209/article/details/80064049
-
Java new一个对象的过程
2019-05-15 17:19:291,首先到常量池中找类的带路径全名,然后检查对应的字节码是否已被加载,解析,验证,初始化,如果没有先执行类加载过程(class.forname())。 2,类加载过程完成后,虚拟机会为对象分配内存。分配内存有两种方式,... -
java for循环中使用克隆代替new对象
2018-10-17 12:51:04public class User implements Cloneable { private Integer age; private String name; public User() { ...可见,for循环中使用克隆生成对象的效率比new生成对象的效率高。 以上是浅克隆。 -
java中new是什么意思?
2021-02-12 09:25:52在Java中使用new关键字使创建对象变得很容易。需要访问一个文件吗?只需要创建一个新的File实例:new File(“jdbc.properties”)实例化一个类对象new运算符实例化一个类对象,通过给这个对象分配内存并返回一个指向... -
Java中New一个对象是个怎么样的过程?
2018-03-19 23:09:50在语言层面创建对象(例如克隆、反序列化)通常仅仅是一个new关键字而已,而在虚拟机中,对象(普通Java对象,不包括数组和Class对象等)的创建时一个怎么样的过程?一、对象的创建 当虚拟机遇到一条new指令时候,... -
Java中创建对象的六个步骤 细分后(new关键字)对象头详细介绍
2020-07-16 22:31:39要看的懂对象的创建过程,首先你得有对Java虚拟机和Java基础以及JUC很是熟悉,比如类的加载过程,CAS、多线程、JVM的GC等等 首先好看一个图,我大概会根据图中的内容来分享这六个步骤(其实几个步骤不重要,只要包括... -
java中创建对象的几种方式解析——不止只有New
2017-11-23 16:57:27博主总结Java中有5种创建对象的方式,下面给出它们的例子还有它们的测试代码:首先,列举这5种创建对象得方式: 使用得方法 是否调用构造函数 使用New关键字 是 使用Class类的newInstance 是 使用Constructor... -
java中用new创建一个对象的过程解析
2016-10-05 01:00:471.右边的“new vheicle"是以vehicle类为模板,在堆空间里创建一个vehicle类对象(也简称vehicle对象)。 2.末尾的()意味着,在对象创建后,立即调用vehicle类的构造函数,对刚生成的对象进行初始化。构造函数肯定... -
java中new的作用
2019-08-15 10:29:182、实例化Instantiating :new关键字是一个java运算符,它用来创建对象。 3、初始化Initialization:new运算符,随后调用构造函数,初始化新创建的对象。 1、声明一个变量来指向一个对象,即引用 在此之前,你知道,... -
JAVA中销毁一个对象的方法
2021-02-26 09:06:13方法一:垃圾回收器垃圾回收器是Java平台中用的最频繁的一种对象销毁方法。垃圾回收器会全程侦测Java应用程序的运行情况。当反先有些对象成为垃圾时,垃圾回收器就会销毁这些对象,并释放这些对象所占用的内存空间。... -
关于Java中使用new关键字创建对象
2019-10-28 20:15:56关于Java中的堆和栈 栈存取速度比堆快而且数据可以共享,但栈中数据大小与生命周期必须确定 对象创建的过程 我们在需要使用List集合的时候通常会出现下面的语句 List list = new List(); 在这条语句左边是在栈区... -
java中new的用法是什么
2021-03-09 16:15:00一、输入数据要用new——实例化对象,创建内存示例:Scanner reader = new Scanner(System.in);Scanner是一个类,reader为创建的一个Scanner的对象,new就创建了这个实例,为其分配变量。输入的基本类型数据:... -
Java8中直接new对象和用 类名::new 创建对象这两种形式有什么区别吗?
2019-05-02 08:22:48为什么在线程中用 类名::new 创建Runable对象后对象的run方法好像没有被执行,线程3和4没有输出内容(PrintThreadName就是输出当前线程名称的) ``` public static void main(String[] args) { new Thread... -
java new一个对象的过程
2019-07-05 10:36:43Java在new一个对象的时候,会先查看对象所属的类有没有加载到内存中,如果没有,就会先通过类的全限定名来加载。加载并初始化完成后,再进行对象的创建工作。 ①加载和初始化类 通过双亲委派模型进行类的加载,先... -
Java中new出来的算是对象吗?
2018-07-28 23:59:10如题,一直有个问题困惑着我,基本类型中我们可以这样定义对象(以int为例): int a; 而引用类型却是只能new出来的,比如这样的: Human xiaoming=new Human(); 问题来了,这里的xiaoming算是对象吗?如果... -
java new对象的创建过程
2018-07-29 07:00:54关于对象的创建过程一般是从new指令(我说的是JVM的层面)开始的(具体请看图1),JVM首先对符号引用进行解析,如果找不到对应的符号引用,那么这个类还没有被加载,因此JVM便会进行类加载过程(具体加载过程可参见我的... -
Java对象的内存是在哪里分配的?
2020-09-11 21:12:20对于绝大多数对象,内存的确是在堆中分配的,但是随着JIT编译器的进步、逃逸分析技术的成熟,“Java对象都是在堆中分配内存”这个结论变得不是那么绝对了。 针对Java的内存分配策略,笔者这里画了一张简图如下: 栈... -
java中新建对象设为null 和new 一个对象的区别
2019-05-20 16:35:37直接在外层让pics为null ,里面的值直接引用,但是在程序的过程中,set值得时候始终未成功,后来在网上查了下null值和new对象的区别,null值是一个空指向,不会占用内存。new是一个实体,会占用内存。但是我又不行在... -
Java中为什么要用new来构造对象
2019-08-11 15:09:40如果我们要创建一个Text的对象t1我们就会用到text中的构造函数,并且在构造函数的前面加上new运算符 new Text() 这个表达式构造了一个Text的对象并且初始化了a的值。 所以我们要想创建一个对象应该 Text... -
Java中newInstance()和new()区别
2020-11-02 09:30:49newInstance 是弱类型(GC是回收对象的限制条件很低,容易被回收)、低效率、只能调用无参构造,new 是强类型(GC不会自动回收,只有所有的指向对象的引用被移除是才会被回收,若对象生命周期已经结束,但引用没有被... -
Java 一个变量连续new对象,旧的对象怎么销毁
2017-09-22 13:55:16只有一个变量,连续new几个对象后,旧的对象会自动销毁吗,怎么才能让它们被回收呢 -
JAVA中对于需要频繁new的对象的一个优化的方法
2016-08-11 15:53:10在实际开发中,某些情况下,我们可能需要频繁去创建一些对象(new),下面介绍一种,我从书上看到的,可以提高效率的方法。 首先,对于将会频繁创建的对象,我们要让这个类实现Cloneable接口,因为这个优化的核心,... -
JAVA for循环外new 对象与循环内new对象的问题
2017-12-28 16:39:33最近写代码的时候,一直在思考这个问题,现在空了,写篇文章记录一下吧! 先来看一段源代码,三种场景:public static List<Demo> for1(){ System.out.println("1."+System.... List<Demo> demos = new -
Java中创建对象数组
2021-01-16 16:52:24如果一个数组中的元素是对象类型,则称该数组为对象数组。当需要一个类的多个对象时,应该用该类的对象数组来表示,通过改变下标值就可以访问到不同的对象。 2.对象数组的定义和使用: 对象数组的定义与一般数组的... -
java反射对象和new出来的对象有什么区别
2019-04-26 08:45:44一、****************************...b1:反射属于动态编译,意思就说只有到运行时才会去获得该对象的实例,大多框架都是使用反射获取对象实例,如Spring 二、*****************************************************... -
java中的对象
2018-10-31 17:31:41java中的对象 1.什么对象? 所谓的对象其实就是通过java类所产生的实体。 例如:盖楼房的图纸就是Java类,根据这个图纸修建起来的能够被看见,被使用的这个实际存在的楼房,就是相当于是用过这个图纸得到的... -
java对象的销毁详解
2021-03-01 07:52:24在创建对象的时候,用户必须使用new操作符为对象分配内存,但是要注意了,在清除对象的时候,由系统自动进行内存回收,不需要用户额外处理,这也是Java语言特色之一,在某种程度上方便了程序员对内存的管理。Java...