标签:ext void 使用 pre swa ati oid print span
今天学到java的对象和类中,
由于刚考完c++面向对象与程序设计这门课,对于c++中的类掌握自认为不错,就开始过渡到java。
今天面对的问题,在书写一个类的时候,发现了许多与c++不同的地方。
比如:
1.在java中,所有的Java对象都是在堆中构造的,构造器总是伴随着new操作符一起使用。
这玩意,就和c++很不一样。
在主函数main中为例,
public static void main(String[] args){ Employee a= new Employee("zhangzhenyu",1000); }
2.在java中,函树中有static参数和没有static调用函数方法不同
这玩意,语法上和c++完全不一样。
在主函数main中为例,
1)有static
1 public class test { 2 3 public static void main(String[] args){ 4 Employee a= new Employee("zhangzhenyu",1000); 5 triple(a); 6 } 7 public static void triple(Employee x) { //静态方法可以直接调用。 8 x.changeSalary(2000); 9 }; 10 }
2)没有static
1 public class test { 2 3 public static void main(String[] args){ 4 Employee a= new Employee("zhangzhenyu",1000); 5 test A = new test(); 6 A.triple(a); 7 } 8 public void triple(Employee x) { //非静态函数,需要使用对象来调用。 9 x.changeSalary(2000); 10 }; 11 }
3.java中对象引用采用的是值传递
以书中Empolyee代码为例
public class test { public static void main(String[] args){ Employee a= new Employee("zhang",1000); Employee b= new Employee("chen",2000); //System.out.println(a.getName()); System.out.println("a = "+ a.getName()); System.out.println("b = " + b.getName()); swap(a,b); System.out.println("a2 = " + a.getName()); System.out.println("b2 = " + b.getName()); } public static void swap(Employee x,Employee y) { Employee temp = x; x = y; y =temp; System.out.println("x in the methods = " + x.getName()); System.out.println("y in the methods = " + y.getName()); }; } class Employee { private static int nextId = 1; private String name; private double salary; private int id; public Employee(String n,double s) { name = n; salary = s; id = 0; } public String getName() { return name; } public double get() { return salary; } public void changeSalary(double a) { salary = a; } public int getId() { return id; } public void setId() { id = nextId; nextId++; } }
结果: a = zhang b = chen x in the methods = chen y in the methods = zhang a2 = zhang b2 = chen
如果Java对对象采用的是按引用调用,纳闷这个方法就应该能够实现数据的交换。但是结果不是。
在swap方法结束时,参数变量x和y被丢弃,原来变量a和b仍然引用这个方法调用之前所引用的对象。
方法不能修改传递给它的任何参数变量的内容。
public static void changeSalary(Employee x) { x. raiseSalary(200); } //当调用 a = new Employee(xxxx); changeSalary(a);
补充一种对象引用
对象引用作为参数有些不同
public class test { public static void main(String[] args){ Employee a= new Employee("zhang",1000); //System.out.println(a.getName()); System.out.println("a = "+ a.get()); swap(a); System.out.println("a2 = " + a.get()); } public static void swap(Employee x) { x.changeSalary(5555); System.out.println("a in = " + x.get()); }; } class Employee { private static int nextId = 1; private String name; private double salary; private int id; public Employee(String n,double s) { name = n; salary = s; id = 0; } public String getName() { return name; } public double get() { return salary; } public void changeSalary(double a) { salary = a; } public int getId() { return id; } public void setId() { id = nextId; nextId++; } }
//结果 a = 1000.0 a in = 5555.0 a2 = 5555.0
可以看出来,值发生了改变,这个问题我目前还需要再学习学习,还是有些不懂。
标签:ext void 使用 pre swa ati oid print span
原文地址:https://www.cnblogs.com/zhenyude123123/p/12192435.html