JAVA中加new和不加new的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA中加new和不加new的区别相关的知识,希望对你有一定的参考价值。

在java中,new用来开辟堆内存,又叫初始化,一般情况下,对象创建好后,都需要用new进行实例化;不用new通常在单例模式中可见,对象在类里面创建,构造函数用private修饰,外面不能创建对象,只能调用内部方法静态方法,即对象的初始化在创建对象时已经完成
一般来说,不使用new的情况都属于一些特定的情况,比如:
1.

Class clas = Class.forName(“NewClass”);
NewClass obj = (NewClass) clas.newInstance();

- Class.forName()这个方法会加载这个类并创建一个实例
2.

Demo deo = new Demo();
Demo1 deo1 = deo.clone();
参考技术A 在java中,new用来开辟堆内存,又叫初始化,一般情况下,对象创建好后,都需要用new进行实例化;不用new通常在单例模式中可见,对象在类里面创建,构造函数用private修饰,外面不能创建对象,只能调用内部方法静态方法,即对象的初始化在创建对象时已经完成
一般来说,不使用new的情况都属于一些特定的情况,比如:
1.

1
2

Class clas = Class.forName(“NewClass”);
NewClass obj = (NewClass) clas.newInstance();

- Class.forName()这个方法会加载这个类并创建一个实例
2.

1
2

Demo deo = new Demo();
Demo1 deo1 = deo.clone();
参考技术B 当你定义一个变量 特别是对象或者指针的时候 如果你加new 那么你在未使用变量之前 系统就分配了一个地址 而不需要你去制定特定的地址 如果没有就还需要你去指定一个地址 比如
Person是一个类 那么Person person; person.x=8;这个语法是错的 因为你没有为对象分配地址 而你用 Person person = new Person (); person.x=8;就是正确的 因为你在new的时候就为person对象分配了一个地址 person对象可以直接使用
参考技术C 前者是显示的为你创建一个实例,后者跟你封装了new的过程再返回一个实例。

Java基础(42):Java中主类中定义方法加static和不加static的区别(前者可以省略类名直接在祝方法调用,后者必须先实例化后用实例调用)

 1 package lsg.ap.april4th2;
 2 /*
 3     知识点:1.Getter and Setter 的应用
 4        2.局部变量与成员变量(也可叫做全局变量)
 5        3.Static关键字的用法
 6          a.成员变量被static修饰后的所有类的共享属性
 7          b.方法被static修饰之后,在本类内调用的类名省略问题;以及不用Static,即使在本类内也必须先实例化
 8        4.This关键字的用法
 9     this:是当前类的对象引用。简单的记,它就代表当前类的一个对象。
10 
11     注意:谁调用这个方法,在该方法内部的this就代表谁。
12     
13     this的场景:
14         解决局部变量隐藏成员变量
15 */
16 //定义学生类
17 class Person 
18 {
19     //姓名
20     private String name="刘德华";
21     //年龄
22     private int age=45;
23     //所有对象共享的属性用static修饰,可以直接被类名直接调用
24     static String country = "中国";
25     
26     //姓名获取值
27     public String getName() 
28     {
29         return name;
30     }
31 
32     //姓名设置值
33     public void setName(String name) 
34     { //name = "林青霞";
35         //name = name; //变量的使用规则:就近原则
36         //这里是类名,目前还没有说过类似的用法,所以这个是有问题的
37         //这里的调用只能通过对象名
38         //这个对象如果存在,它应该代表的是Student的一个对象。
39         //那么,谁能够代表当前类的对象呢? java就提供了一个关键字 this
40         //Student.name = name;
41         this.name = name;
42     }
43 
44     //年龄获取值
45     public int getAge() 
46     {
47         return age;
48     }
49 
50     //年龄赋值
51     public void setAge(int age) 
52     {
53         this.age = age;
54     }
55 }
56 
57 //测试类
58 
59 public class PersonClass 
60 {
61 
62     public void show()//定义非静态方法,必须经过实例化后才能调用
63                       
64     {
65         System.out.println("哈哈");
66     }
67     public static void show2()//但是当以静态方法后,可以直接用 类名.函数名
68                              //调用,在本类内,类名可以忽略,这就是常见的public static...的由来
69     {
70         System.out.println("哈哈你妹");
71     }
72     public static void main(String[] args) 
73     {
74         //创建人对象
75         Person s1= new Person();
76         Person s2= new Person(); 
77         PersonClass s3=new PersonClass();
78         s3.show();//不能直接写show(),因为是非静态方法,必须实例化后通过实例调用
79         show2();
80         //给成员变量赋值
81         s1.setName("林青霞");
82         s1.setAge(27);
83         s1.country="美国";//静态变量的值是共享的,所以以最后一次修改的为准,即全变成了日本
84         s2.country="日本";//静态属性最好用类名直接调用,要不会警告的哦
85         //Static 与Final是不同的哦,Static类似C语言的Extern,Final类似Define
86         //Static定义的变量的值仍然是可以修改的,但是Final指定在定义的时候赋值一次
87         //获取数据
88         System.out.println(s1.getName()+"---"+s1.getAge());//直接用类名.调用Name和
89                                                             //        age是绝对不可以的
90         System.out.println(s2.getName()+"---"+s2.getAge());
91         System.out.println(s1.country);//静态属性最好不要用类的实例调用,会警告的
92         System.out.println(s2.country);
93         System.out.println(Person.country);//Person.后面只提示country,
94                                           //不会提示name和age哦
95     }
96 
97 }

 

以上是关于JAVA中加new和不加new的区别的主要内容,如果未能解决你的问题,请参考以下文章

js中加“var”和不加“var”的区别

13 类对象的声明中加小括号{}和不加小括号{}的区别

js中加“var”和不加“var”的区别,看完觉得这么多年js白学了

JS构造函数加new与不加new的区别?

python3 中定义类函数参数中加 self 和不加的区别在哪

new一个对象后面加括号与不加括号的区别