类,对象,变量和方法(1)


先从两段代码谈起
这两端代码分别在两个class中,前者姑且称为对象类,类名Cell,后者称为测试类,测试类包含main方法,类名CellGame;
Cell 中代码如下

public class Cell {
    int row;
    int col; //成员变量
public void drop() { //无参无返回值方法
        row++;
    }
public void moveLeft(int d) { //有参无返回值方法
        col -= d;
    }
public String getCellInfo () { //无参有返回值(String类型)方法
        return row + "," + col;
    }
}

Annotation: 这段代码很简单,就是建了一个叫做Cell的类,类中封装有两个成员变量 row col,然后有三个方法。

CellGame 中代码如下

public class CellGame{
    public static void main(String[] args) { //main方法
        System.out.println("----------绘制Cell----------");
        Cell cell = new Cell(); //引用Cell类型中被封装好的数据创建了一个Cell类型的对象,叫cell,该封装被定义为Cell类型,它就像一个盒子,可以装各种基本类型变量,属于引用类型变量,简称引用。
        cell.row = 15; //访问并给Cell中的成员变量赋值(初始化)
        cell.col = 6; //访问并给Cell中的成员变量赋值(初始化)
        printCell(cell); //调用下面的public static void printCell(Cell cell)方法,并上传参数cell,此处即上传了row和col两个成员变量,分别赋值为15和6;
        System.out.println("----------Cell下落一行----------");
        cell.drop(); //调用Cell中的public void drop()方法
        printCell(cell);调用下面的public static void printCell(Cell cell)方法,并上传参数cell,此处由于调用了drop,row自增1,即赋值为16;col不变;
        System.out.println("----------Cell左移一行----------");
        cell.moveLeft(1);调用Cell中的public void moveLeft(int d)方法,并上传参数d赋值为1;
        printCell(cell);调用下面的public static void printCell(Cell cell)方法,并上传参数cell,此处由于调用了moveLeft,col减1,即赋值为5,row不变,仍为16;
    }
    public static void printCell(Cell cell) { //一个有参方法,参数是Cell类型的变量 cell(这个cell称为局部变量,相对于类中的成员变量而言)
        int totalRow = 20;
        int totalCol = 10;
        for (int row = 0; row < totalRow; row++) {
            for (int col = 0; col < totalCol; col++) {
                if (cell.row == row && cell.col == col) {
                    System.out.print("* ");
                } else {
                    System.out.print("- ");
                }
            }
            System.out.println();
        }
    }
}

Annotation: 这段代码都有两个方法,一个main方法,一个新建有参方法。其中main方法主要是给变量初始化并调用方法(行为);

这里主要想说的是,main方法中的这行代码:printCell(cell); //调用下面的public static void printCell(Cell cell)方法,并上传参数cell,此处即上传了row和col两个成员变量,分别赋值为15和6;

这里贴一段我现在常写的调用有参方法代码如下:

public class Test {
    public static void main(String[] args) {
        B var = new B();
        var.C(5);        
    }
}
class B{
    int a;
    void C(int a){
        this.a = a;
        System.out.println(a);
    }
}
但是 例子中的两段代码大概是这么个语法:
class B{  
B(){
}  
}

Annotation: 这段类似与上面的Cell类


public class Test {
    public static void main(String[] args) {
        B var = new B();
        C(var);
    }
    public static void C(B var) {
         int a = 5;
        System.out.println(a);    
    }
}

Annotation: 这段类似与上面的CellGame类似,它们调用有参方法的方式和我常用的并不一样
这里需要明确的是,目前老师尚未讲解class的构成,只是讲了方法的5要素,方法中的修饰词可以出现重复,但类前面的public则无法在一个文件中重复使用,即
一个文件中不能有两个public类;
现在来好好分析这两段代码:
C(var)引用了C这个有参构造,这个构造特别的地方在于它的参数列表,之前写的参数列表都是类似(int a)即一个整型 基本数据类型变量 a,但是此处的参数列表是 一个自定义为B的类型 的 引用数据类型 变量 var;
然后var被初始化为一个B类型的数组对象,即为B类引用数据类型变量
然后vary作为参数调用C(var)中的所有变量和行为。即参数也可以是引用,但调用方法上传参数时参数也应该是引用,而且类型需要匹配。
这里有意个需要注意的点,就是C(B var)方法中的修饰词不能省略static;这个老师目前还尚未提到方法中修饰词的作用,因此暂时搁置;

问题还有许多,比如类的作用域能放什么?;方法的作用域能放什么?它们又不能放什么?
目前只知其一,不知其二,知其一是新建类和测试类,测试类中放对象、变量和方法,新建类中则用于封装对象变量和方法,方法内的变量只能在方法内用,或被调用,类中的成员变量则可以让其他方法共用。
特别指出:
//via 笔记20170210
在方法中的每个成员变量的前面,其实默认有个this.;
PS: . 之前是一个引用,this.就是指代当前对象的引用,哪个对象调用这个方法,它就指带这个对象.引用,也就是说,就整个代码来说,this可能是动态的指代不同的;

成员变量可以跟局部变量同名 使用时是按照就近原则使用,这种情况下this.就有用了:
e.g. class Car{
String name;//成员变量
Car(String name//局部变量){
this.name = name;
}
}
这才是标准写法;

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/u/3264179/blog/838742

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值