码迷,mamicode.com
首页 > 编程语言 > 详细

java学习从“菜鸟”到“放弃”

时间:2020-01-14 16:17:01      阅读:82      评论:0      收藏:0      [点我收藏+]

标签: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

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

java学习从“菜鸟”到“放弃”

标签:ext   void   使用   pre   swa   ati   oid   print   span   

原文地址:https://www.cnblogs.com/zhenyude123123/p/12192435.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!