杰神之Java类和对象的关系

原创 2018年01月08日 21:39:53

Java 类和对象

  • 对象:对象是类的一个实例(对象不是找个女朋友),有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。

  • 类:类是一个模板,它描述一类对象的行为和状态。
    下图中男孩女孩为类,而具体的每个人为该类的对象:
    这里写图片描述
    Java中的对象现在让我们深入了解什么是对象。看看周围真实的世界,会发现身边有很多对象,车,狗,人等等。所有这些对象都有自己的状态和行为。拿一条狗来举例,它的状态有:名字、品种、颜色,行为有:叫、摇尾巴和跑。对比现实对象和软件对象,它们之间十分相似。软件对象也有状态和行为。软件对象的状态就是属性,行为通过方法体现。在软件开发中,方法操作对象内部状态的改变,对象的相互调用也是通过方法来完成。

类和对象的关系

类:对一类事物行为和状态的抽象描述(图纸、模板)
对象:用类实例出来的具体事物(房子)

定义一个类,使用 class 修饰
注意:一个文件中,只运行一个 public 修饰的类

类中包含:
对类的描述:(属性和行为)
属性:一般都使用名词来修饰
行为:一般都使用动词来修饰

类中写
成员变量(实例方法)写在类中方法外
成员方法(实力方法)写在类中

创建对象:
类名 对象名 = 初值;
类名 对象名 = new 类名();

例如:
    // 创建一个对象
    Animal dog = new Animal();
    // 访问成员变量:对象.成员变量
    // 如果成员变量在等号前面叫赋值,等号后面叫获取
    // 给成员变量赋值
    dog.name = "来福";
    // 获取成员变量
    String stringName = dog.name;
    System.out.println(stringName);
    // 调用成员方法:对象.方法
    dog.sayHi();
    dog.eat();
    dog.sleep();
// 创建一个动物类 (姓名,年龄,雌雄,会介绍自己,睡觉,觅食)
// 思考:如果在类中声明成员变量没有给初值,那么这个变量有初值吗?
// 有,因为对象创建在堆内存(堆内存中有默认的初始值)

class Animal {
    // 成员变量的作用域是整个类中都可以访问到
    String name = "旺财"; // 姓名
    int age = 2;                // 年龄
    String gender = "公";    // 性别

    // 成员方法
    public void sayHi() {
        System.out.println("名字:" + name);
        System.out.println("年龄:" + age);
        System.out.println("性别:" + gender);
    }
    // 睡觉
    public void sleep() {
        System.out.println(name + "zzz~");
    }
    // 觅食
    public void eat() {
        System.out.println(name + "进食");
    }

}

匿名对象
1.如果只调用方法,这时可以使用匿名对象(测试时会调用)
2.匿名对象可以当做参数进行传递

好处:当参数时,代码简便
弊端:无法直接修改里面的值

new Person().introduce();
new Person().username ="007";
new Person().introduce();

思考:
    // 方法需要什么参数,就创建什么参数传进去
    // 当参数为引用数据类型时,需要创建出这个对象,然后将地址穿进去
    // 你需要创建出这个对象,然后将地址穿进去
    // 有几个对象 几个引用? 这块内存空间,有多少人使用它
    Person p = new Person();
    Person person10 = create("王10", p);
    person10.introduce();
    p.introduce();
    Person p2 = person10;
    p2.introduce();
    p2.username = "王 p2";
    p2.introduce();

    // 创建一个人
    Person person = new Person();
    person.username = "刘一";
    person.password = "1";
    person.randomNum = (int)(Math.random() * (9999 - 1000 + 1) + 1000);
    person.introduce();
    // 创建一群人
    create("陈二", "2", (int)(Math.random() * (9999 - 1000 + 1) + 1000));
    create("张三", "3", (int)(Math.random() * (9999 - 1000 + 1) + 1000));
    create("李四", "4", (int)(Math.random() * (9999 - 1000 + 1) + 1000));
    create("王五", "5", (int)(Math.random() * (9999 - 1000 + 1) + 1000));
    create("赵六", "6", (int)(Math.random() * (9999 - 1000 + 1) + 1000));
    create("孙七", "7", (int)(Math.random() * (9999 - 1000 + 1) + 1000));
    create("周八", "8", (int)(Math.random() * (9999 - 1000 + 1) + 1000));
    create("吴九", "9", (int)(Math.random() * (9999 - 1000 + 1) + 1000));
    create("郑十", "0", (int)(Math.random() * (9999 - 1000 + 1) + 1000));
    // 创建对象
    public static Person create(String username, String password, int randomNum) {
        Person person = new Person();
        person.username = username;
        person.password = password;
        person.randomNum = randomNum;
        person.introduce();
        return person;
    }public static Person create(String username, Person p) {
        Person person = new Person();
        person.username = username;
        person.introduce();
        return person;
    }

class Person{
    String username;
    String password;
    int randomNum;

    // 介绍自己
    public void introduce() {
        System.out.println("用户名:" + username);
        System.out.println("密码:" + password);
        System.out.println("卡号:" + randomNum);
    }
}

思考:类能不能重名?
可以,在不同 Package 下可以重名使用

例如:
    com.lanou3g.bean.Cat cat = new com.lanou3g.bean.Cat();
    cat.setName("大花");
    cat.setColor("黄色");
    cat.setBreed("波斯猫");
    cat.sayHi();
    cat.eatFish();
    cat.actingCute();
    cat.getCaught();

    // 创建 bean1包下得到 Cat 对象
    // 如果类名相同的话,创建对象的时候
    // 要使用全限定类名(包名 + 类名)
    // com.lanou3g.bean1.Cat cat1 = new com.lanou3g.bean1.Cat();
    // cat1.sayHi();

public class Cat {
    private String name;
    private String color;
    private String breed;

    // 无参构造方法
    public Cat() {
        name = "阿花";
        color = "七彩";
        breed = "biubiu 喵";
        System.out.println("构造方法");
    }

    // 有参构造方法
    public Cat(String name, String color, String breed) {
        this.name = name;
        this.color = color;
        this.breed = breed;
        System.out.println("构造方法");
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }
    public String getBreed() {
        return breed;
    }
    public void setBreed(String breed) {
        this.breed = breed;
    }

    public void eatFish() {
        System.out.println("吃鱼");
    }

    public void actingCute() {
        System.out.println("卖萌,喵~");
    }

    public void getCaught() {
        System.out.println("被老鼠抓,难受");
    }

    public void sayHi() {
        System.out.println(getName());
        System.out.println(getBreed());
        System.out.println(getColor());
    }

}

get/set 方法

成员变量私有化时,需要使用 get/set 方法来获取/修改成员变量

例如:
    Student student = new Student();
    // 使用 get/set 方法
    student.setName("student_1");
    student.setAge(21);
    student.sayHi();

class  Student {
    // 成员变量私有化(只能本类进行访问,本类以为无法访问)
    // 不能通过对象.属性来直接访问
    // 但是可以通过方法来间接访问
    private String name;
    private int age;

    // get/set 方法
    // 命名规范:以 get/set 开头,使用小驼峰写法
    // 获取
    public String getName() {
        return name;
    }
    // 修改
    public void setName(String name) {
        // 提供关键字 this 代表本类的对象
        // 哪个对象调用这个方法,这个对象就是 this
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    // 就近原则(这里会打印局部变量
    public void sayHi() {
        String name = "爱上了登记卡死";
        System.out.println(name);
        System.out.println(getName());
        System.out.println(getAge());
    }

}

成员变量和局部变量的区别

1.书写位置
成员变量:类中方法外
局部变量:方法中或方法声明上
2.内存中的位置
成员变量:存在于堆内存中
局部变量:加载到栈内存中
3.初值
成员变量:有默认初始值(堆给的)
局部变量:无默认值,如果要调用,必须要赋予初值
4.生命周期
成员变量:随着对象的创建/销毁而创建/销毁
局部变量:随着方法存在

例如:
    // 创建对象
    Car car = new Car();
    // 赋值
    car.brand = "玛莎拉蒂";
    car.color = "红色";
    car.tire = "4";
    // 调用对象中的方法
    car.introduce();
    car.move();
    car.thrustInto();

class Car {
    String brand;   // 牌子
    String color;   // 颜色
    String tire;        // 轮胎个数(数据类型只要符合逻辑,即可定义,例如 tire 不能用 double 来定义)

    // 会动
    public void move() {
        // 局部变量
        // 声明位置: 方法中或者方法声明上(参数位置)
        int num = 0;
        System.out.println(num);
        System.out.println(brand + "飘逸");
    }
    // 会撞人
    public void thrustInto() {
        System.out.println(brand + "飘逸速度太快了,撞人了");
    }
    // 介绍自己
    public void introduce() {
        System.out.println("品牌:" + brand);
        System.out.println("颜色:" + color);
        System.out.println("轮胎:" + tire);
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lyj243719866/article/details/79007526

java 类和对象的关系

一 1.
  • u014182962
  • u014182962
  • 2014-10-13 11:24:56
  • 1663

Java类和对象 详解(一)

一、面向对象简述面向对象是一种现在最为流行的程序设计方法,几乎现在的所有应用都以面向对象为主了,最早的面向对象的概念实际上是由IBM提出的,在70年代的Smaltalk语言之中进行了应用,后来根据面向...
  • wei_zhi
  • wei_zhi
  • 2016-10-06 20:48:02
  • 28081

类和对象之间的关系

  从日常生活中看对象 其实对象这个名次对我们来说一点也不陌生,因为我们的日常生活中。随处可见的都是对象,小到地上的一粒沙,大到中国的万里长城,埃及的金字塔,所有的东西都是对象(万物皆对象)我们之所以...
  • xjGosling
  • xjGosling
  • 2005-03-08 15:01:00
  • 11044

java 类和对象的理解

对象和类的定义 重载 class father { public void get() { System.out.println("father"); } } ...
  • qq_26296197
  • qq_26296197
  • 2016-09-01 08:08:43
  • 2083

Java中类的创建及类与对象的关系

//import java.util.Scanner; //创建一个类 class Person{ //属性和方法的定义不是必须的 //属性 String name ; int age ;...
  • morixinguan
  • morixinguan
  • 2016-08-22 10:27:04
  • 802

杰神之Java字符流和转换流的使用

字符流 在程序中一个字符根据不同编码等于不同个字节,那么java提供了Reader、Writer两个专门操作字符流的类。 ·字符输出流:Writer ·字符输入流:Reader 字符输出流...
  • lyj243719866
  • lyj243719866
  • 2018-01-31 22:01:07
  • 22

Java类与对象的关系

类与对象的关系: 类是拥有相同行为特征对象的一个抽象概念,而对象是类这个抽象概念中事实存在的个体。 打个比方:类;人,对象:你。人这个类可以是黄种人、黑种人、白种人等等,但是对象实实在在的就是指...
  • YZJ_0722
  • YZJ_0722
  • 2017-07-19 19:28:45
  • 192

什么是类?什么是对象?类和对象有什么关系?

面向对象(Object Oriented,OO)。 起初,“面向对象”是指在程序设计中采用封装、继承、多态等设计方法。现在,面向对象的思想已经涉及到软件开发的各个方面。如,面向对象的分析(OOA,O...
  • qq_34086047
  • qq_34086047
  • 2016-05-13 15:26:11
  • 24879

实例说明类与对象的关系及区别

在面向对象编程中,类是一个结构,这个结构定义属性和方法的集合。它可以被看作是一个模板。例如: class Item { public $itemType; /* e.g. thi...
  • zgmu
  • zgmu
  • 2017-11-23 13:43:34
  • 152

java基础入门-类、对象、实例的关系

关于类、对象、实例的关系我总结为下面的图 class:类别,比如“人”这一类 object:通过实例弄出来的一个具象的物件,比如:“bill”这个物件,属于“人”这一类 instance:具象对象的过...
  • raylee2007
  • raylee2007
  • 2015-04-22 08:34:42
  • 1035
收藏助手
不良信息举报
您举报文章:杰神之Java类和对象的关系
举报原因:
原因补充:

(最多只允许输入30个字)