package com.dyd;
public class Project {
int num;
float cpu;
public static void main(String[] args) {
//给属性赋值
Project hello=new Project();
// hello.num=3;
// hello.cpu=2.9f;
hello.show();
// shows.num=2;
// shows.cpu=1.9f;
// shows.show();
}
public void show() {
Project hello=new Project();
hello.num=3;
hello.cpu=2.9f;
System.out.println("num:"+num+"cpu:"+cpu);
}
}
然后你show方法里打印的num 和cpu是main方法中对象的属性
你给的是成员变量的值,而方法内的值是要加hello.num
静态与非静态的调用
你的show方法重新定义了一个对象,和main方法中的对象不是同一个
我们先来看show这个方法,
public void show() {
Project hello=new Project();//一、实例一个对象Project->hello,我们知道实例出来的对象在内存,我们先称它为 内存1号hello对象
hello.num=3;//二、将 内存1号hello对象 的num 赋值为3
hello.cpu=2.9f;//三、将 内存1号hello对象 的cpu赋值为2.9f
System.out.println("num:"+num+"cpu:"+cpu);//四、将变量num,变量cpu的值打印出来。
}
我们着重看下第四句话,我们知道,java语言中,要使用一个变量必须先声明并初始化,这里我们并没有看到有声明或和初始化变量num,变量cpu的语句,那么这句话编译的时候为什么没有报错。这时我们就要看下show()这个成员方法属于的类中有没有对应的变量。
public class Project {
int num;
float cpu;
}
我们看到的是,Project是有成员变量量 整形的 num 和 浮点型的 cpu。
那么其实我们看到的show()方法中的num和cpu,是this.num 和 this.cpu 的缩写,指的是 他们分别是 Project 这个类两个成员变量的引用。由于分别是整形和浮点型,我们在main()方法入口,执行Project hello=new Project();进行实例化时,就会对其成员变量中属于基本数据类型的他们进行初始化赋值。整形=0,浮点型=0.00.
如果你是想对成员变量赋值,而不是对show()方法里的局部变量赋值,在类内部中,建议你加上 this 字段,用this.num=3 这样语句赋值。快速定位而且具有可读性。
?
我的意思是成员变量的赋值怎么错了,输出成员变量的值,并不是给局部变量赋值,并输出。
public class Project {
int num;
float cpu;
这是成员变量
public void show() {
num=3;
cpu=2.9f;
方法内部是局部变量
package com.dyd;
public class Project {
int num;
float cpu;
public static void main(String[] args) {
//给属性赋值
Project hello=new Project();
// hello.num=3;
// hello.cpu=2.9f;
hello.show();
// shows.num=2;
// shows.cpu=1.9f;
// shows.show();
}
public void show() {
num=3;
cpu=2.9f;
System.out.println("num:"+num+"cpu:"+cpu);
}
}