Unit01-OOP-对象和类(上)

Posted 唐胜伟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unit01-OOP-对象和类(上)相关的知识,希望对你有一定的参考价值。

      Unit01-OOP-对象和类(上)      

1.什么是类?什么是对象?
  1)现实生活是由很多很多对象组成的
    基于对象抽出了类
  2)对象:真实存在的单个的个体
    类:类型、类别,代表一类个体
  3)类中可以包含:
    3.1)所有对象所共有的特征/属性------变量
    3.2)所有对象所共有的行为-----------方法
  4)一个类可以创建多个对象,
    同一类型的对象,结构相同,数据不同
  5)类是对象的模板,对象是类的具体的实例
 
2.引用类型之间画等号:
  1)指向同一个对象
  2)对其中一个引用的修改影响另一个引用
    eg:房子钥匙
  基本类型之间画等号:
  1)赋值
  2)对其中一个变量的修改不会影响另一个变量
    eg:身份证复印件
    
3.null:空,没有指向任何对象
       若引用的值为null,则该引用不能再进行任何操作了
       若操作则NullPointerException空指针异常

语法:
             引用
类型       引用类型变量  指向   对象
Student    zs             =     new Student();


Student zs; //引用
int a; //变量

             引用
数据类型  引用类型变量  指向   对象
Cell         c                 =     new Cell();

实参,形参
public static void main(String[] args){
  String n = "zhangsan";
  sayHi(n); //String name="zhangsan"; //实参
}
public static void sayHi(String name){ //形参
 
}

面向过程的结构化设计的缺陷:
1.缺乏对数据的封装
2.数据和方法(操作数据)的分离

基本数据类型-------------不够
数组类型-----------------不行
自己造数据类型-----------想装什么就装什么

高质量的代码:
  复用性好、扩展性好、维护性好、
  可移植性好、效率好、健壮性好、可读性好......

引用类型与基本类型

 

画等号

nullNullPointerException

程序示例1:

Cell.java

package oo.day01;
//格子类
public class Cell {
    int row; //行号
    int col; //列号
    
    void drop(){ //下落一格
        row++; //行号增1
    }
    void moveLeft(int n){ //左移n格
        col-=n; //列号减n
    }
    String getCellInfo(){ //获取格子的行号和列号
        return row+","+col; //返回行列号
    }
}

CellTest.java

package oo.day01;
//格子类的测试类
public class CellTest {
    public static void main(String[] args) {
        /*
        Cell c = new Cell();
        c.row = 2;
        c.col = 5;
        c.drop();
        c.moveLeft(3);
        String str = c.getCellInfo();
        System.out.println(str); //3,2
        */
        
        Cell c = new Cell();
        c.row = 2;
        c.col = 5;
        printWall(c); //Cell cc=c;
        
        c.drop(); //c.row=3
        System.out.println("下落后:");
        printWall(c);
        
        c.moveLeft(3);
        System.out.println("左移后:");
        printWall(c);
    }
    //打墙+打格
    public static void printWall(Cell cc){
        for(int i=0;i<20;i++){ //
            for(int j=0;j<10;j++){ //
                if(i==cc.row && j==cc.col){ //行列匹配
                    System.out.print("* ");
                }else{
                    System.out.print("- ");
                }
            }
            System.out.println(); //换行
        }
    }
}

程序示例2:

Student.java

package oo.day01;
//学生类
public class Student {
    //成员变量
    String name;
    int age;
    String address;
     
    //方法
    void study(){
        System.out.println(name+"在学习...");
    }
    void sayHi(){
        System.out.println("大家好,我叫"+name+",今年"+age+"岁了,家住"+address);
    }
}

StudentTest.java

package oo.day01;
//学生类的测试类
public class StudentTest {
    public static void main(String[] args) {
        //创建学生对象
        Student zs = new Student();
        //给成员变量赋值
        zs.name = "zhangsan";
        zs.age = 25;
        zs.address = "河北廊坊";
        //调用方法
        zs.study();
        zs.sayHi();
        
        Student ls = new Student();
        ls.name = "lisi";
        ls.age = 26;
        ls.address = "黑龙江佳木斯";
        ls.study();
        ls.sayHi();
        
        //new之后每个成员变量都有默认值
        Student ww = new Student();
        ww.study();
        ww.sayHi();
        
    }
}

引用类型与null的演示

package oo.day01;
//引用类型与null的演示
public class RefNullDemo {
    public static void main(String[] args) {
        Cell c = new Cell();
        Cell cc = c; //指向同一个对象
        c.row = 2;
        cc.row = 5;
        System.out.println(c.row); //5
        
        Cell ccc = new Cell();
        ccc.row = 6;
        ccc = null; //空,没有指向任何对象
        //ccc.row = 6; //NullPointerException空指针异常
    }
}

 

以上是关于Unit01-OOP-对象和类(上)的主要内容,如果未能解决你的问题,请参考以下文章

Java学习小笔记——对象和类

1102面向对象和类原型

Unit03 - 对象内存管理 继承的意义(上)

synchronized关键字以及对象锁和类锁的区别

在 Cuda 内核中使用 c++ 对象和类成员

Python_016(面向对象之属性和类方法)