Java里面的实例对象new了之后是啥意思了?
Circlec1=newCircle();Circlec2=newCircle();是不是就是说创建一个实例对象,然后把创建的对象赋给c1,c2?这样理解有问题吗?
1.有一生产 circle 的工厂,现在我要生产一个circle,那么我就 new Circle(),这样一个轮子就出来了,而且为了区分不同的轮子,我把这个轮子起个名字叫 c1。现在我又要生产一个轮子,我就又 new Circle(),起名叫 c2。到目前为止你就实实在在的有两个轮子,这两个轮子是不相干的。但有相同的原型 Cricle,也就是一个模子刻出来的。现在有两个轮子了,我可以分别对两个轮子进行不同的操作,而且相符不影响。这两个轮子是两个对象,存储在在内存的不同空间。
这个 Circle c1 = new Circle(); 到底是什么意思呢。是这样的。我们把这句话分为两个部分。一个是 等于号 右边的,这里是生产了一个对象。Circle c1 的意思是什么呢?他是在告诉 jdk c1 是 Circle 类型的,你要按照 Circle 类型的定义对 c1 进行操作。
比如我定义 String s = "123"; 这里的String 告诉系统 s的值 占了多少字节,怎么存储,怎么取出来,能进行什么样的操作等。就是一个 标示 的作用。
2.没有问题
new Circle(); 在Java里,表示在内存中分配一个空间,这个空间存储的是一个Circle对象,即实例
Circle c1=new Circle(); 表示把上面Circle对象的内存地址 赋值 给 c1 对象(其实c1保存的是一个引用,这个引用指向一个Circle对象实例)
3.可以这样理解,Circle是一个圆,而你实例化后,也就是c1和c2,你可以把它们看做一个篮球或是足球,就像比如你要做房子,你先要有图纸吧,这图纸就是Circle,然后你得有工人做房子吧,工人呢就是new关键字,房子呢就是c1或c2
具体就是,Circle是一个类,实例化后成为了具体的对象,new关键字就是把类实例化为对象
4.再顺便说一下User user=null;和User user=new User(); 两者有什么区别,
User user=null; 声明一个变量,类型为User,不创建新实例。
User user=new User(); 声明一个变量,类型为User,同时创建一个新实例。
实际上,第一种写法也可以只写 User user;
但是这样编译器可能会出现Warning,给个null空值,编译器就不会报警了。
第二种写法创建一个新实例,是需要消耗一点点的CPU资源和内存资源的,如果你不需要一个新实例,就用第一种方法。
区别就是这样了
应用场景:
User user=null;
List<User> users=new List<User>();
for(.....)
{
user=new User();
users.add(user);
}
这样的好处是 user类似一种指针,我每次循环,这个指针指向新的User地址这样在循环中不用每次声明新地址
具体要看情况而定,要使用user对象就要有他的实例化对象,如果之前有user对象了就使用第一种用来获取,否则就要使用第二种自己新建一个来用