今天学到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

可以看出来,值发生了改变,这个问题我目前还需要再学习学习,还是有些不懂。

05-28 20:35