ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

day10_类和对象的入门

2022-06-28 08:00:53  阅读:213  来源: 互联网

标签:入门 对象 成员 System day10 Student println 事物


软件存在的意义就是为了解决现实世界当中的问题,它必然模拟现实世界,也就是说现实世界中有什么,软件中就对应有什么。面向对象编程思想中关注点是“对象”或者“事物”,那么在编程语言当中要想创建对象则必须先有类,那么类和对象分别是什么,它们的区别和联系是什么呢?

  • 类:是一类具有相同特性的事物的抽象描述,是一组相关属性行为的集合。我们可以将其理解为对象的设计图。可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该类事物。 类可以看做是一个模版,或者图纸,系统根据类的定义来造出对象。例如:我们要造一个汽车,怎么样造?类就是这个图纸,规定了汽车的详细信息,然后根据图纸将汽车造出来。
  • 类:我们叫做class。 对象:我们叫做Object,instance(实例)。以后我们说某个类的对象,某个类的实例。是一样的意思。通过类可以创建对象,对象又被称为实例(instance),这个过程也可以称为实例化。

现实中,描述一类事物:

  • 属性:就是该事物的状态信息。例如:名字、体重、年龄、颜色
  • 行为:就是该事物能够做什么。例如:​ 行为:走、跑、叫。

类的定义格式:

详解

定义类:就是定义类的成员,主要包括成员变量成员方法

  • 成员变量:和以前定义变量几乎是一样的。只不过位置发生了改变。在类中,方法外

  • 成员方法:和以前写的main方法格式类似。只不过功能和形式更丰富了。在类中,方法外。

  • 其他成员:可以根据需求变化

初识类中的成员:Java中的类可以包含下面几个部分,我们先看一下是什么,之后在慢慢学习

/*
计算机程序中的类,类的设计:
    5大成员(5大组成部分):
    1、属性:数据特征
    2、方法:行为特征,功能特征
    3、构造器:创建对象时用
    4、代码块:在类初始化和对象初始化时用的
    5、内部类:在某个大的事物中,包含了一个独立的小的事物类别,而且一般这个小的事物只为大的事物服务时

*/
//Body类
class Body{
    //类的成员之一:属性
    double weight;
    char gender;
    
    //类的成员之二:方法
    void eat(){
        System.out.println("吃饭");
    }
    void sleep(){
        System.out.println("睡觉");
    }
    
    //类的成员之三:构造器
    Body(){
        
    }
    Body(double weight, char gender){
        this.weight = weight;
        this.gender = gender;
    }
    
    //类的成员之四:代码块
    {
        System.out.println("非静态代码块");
    }
    static{
        System.out.println("静态代码块");
    }
    
    //类的成员之五:内部类
    class Heart{
        public void beat(){
            System.out.println("砰砰跳");
        }
    }
    
}

对象

对象是一类事物的具体体现,是能够看得到摸的着的真实存在的实体。对象是类的一个实例,必然具备该类事物的属性和行为。例如:每个人类都有名字,身高,体重,而对象就是一个个具体的人,比如说张三丶李四..

类与对象的关系

  • 类是对一类事物的描述,是抽象的
  • 对象是一类事物的实例,是具体的
  • 类是对象的模板,对象是类的实体

我们可以把手机的设计图纸看成类,你手中实实在在的手机看成对象

现实世界的一类事物。

  • 属性:事物的状态信息。
  • 行为:事物能够做什么。

Java中用class描述事物也是如此:

  • 成员变量:对应事物的属性,该类事物的状态信息,在类中通过成员变量来体现。
  • 成员方法:对应事物的行为,该类事物有什么功能,在类中通过成员方法来体现

当我们设计好一个类的时候,就可以根据这个类来创建对象了。创建的对象的语法格式如下所示:

​类其实就是对象的数据类型,类是引用数据类型 。对象名其实也是变量名或者叫对象的引用。那么,对象名中存储的是什么呢?答:对象地址。定义类:就是定义类的成员,类中的成员很多。我们可以根据需求来定义对应的成员。

我们来定义一个简单的类

//声明类
class Person{
    //成员变量(声明属性)
    String name;
    int age;
    char gender;
}

下面我们给上面声明的类来创建对象

   /*
        创建对象的格式:
                类名 对象名 = new 类名();
        调用成员变量的格式:
                对象名.变量名
        调用成员方法的格式:
                对象名.方法名();
     */
public class Demo{
    public static void main(String[] args){
        //(1)创建对象
        Person p = new Person();
        
        //(2)为p对象的name属性赋值
        p.name = "张三";
        
        //为p对象的age属性赋值
        p.age = 23;
        
        //为p对象的gender属性赋值
        p.gender = '男';
        
        //(3)访问/显示对象的属性的值
        System.out.println("姓名:" + p.name);
        System.out.println("年龄:" + p.age);
        System.out.println("性别:" + p.gender);
    }
}

对象内存图

单个对象内存图

查看下面案例,分析内存中的变化情况

package com.wrg.demo04;

public class Student {
    // 成员变量: 属性
    String name;
    int age;

    // 成员方法: 行为
    public void study(){
        System.out.println("学生正在学习Java...");
    }
    public void doHomeWork(){
        System.out.println("学生正在做作业敲代码...");
    }
}
class Test {
    public static void main(String[] args) {
        // 创建Student对象
        Student stu = new Student();

        //直接打印对象名,就是输出他的内存地址值
        System.out.println(stu);// com.wrg.demo04.Student@4554617c

        // 访问成员变量
        stu.name = "冰冰";
        stu.age = 18;
        System.out.println(stu.name+","+stu.age);

        // 访问成员方法
        stu.study();
        stu.doHomeWork();
    }
}

图解分析 

结论:

  1. 只要创建对象,就会在堆区开辟一块空间(凡是new就会在堆区开辟一块新的空间)
  2. 只要调用方法,就会在栈区开辟一块空间,用来执行该方法
  3. 打印对象名,默认情况下打印的是全类名(包名 + 类名)

创建多个对象时,对象在内存中的变化情况

  • 多个对象在堆内存中,都有不同的内存划分,成员变量存储在各自对象的内存区域中,成员方法多个对象共用的一份
  • 凡是new就会重新在堆区开辟一块新空间
  • 对象和对象之间的关系是相互独立的

多个变量指向相同对象时,内存中的变化情况

  • 当多个对象的引用指向同一个内存空间(变量所记录的地址值是一样的)
  • 只要有任何一个对象修改了内存中的数据,随后,无论使用哪一个对象进行数据获取,都是修改后的数据。
  • 引用类型传递的是地址值

匿名对象

就是指"没有名字"的对象。也就是引用去指向内存中的对象。特点:匿名对象只能使用一次

       // 创建对象
        Student stu1 = new Student("热巴",18);// 有名字的对象
        stu1.show();
        stu1.show();

        System.out.println("==================================");
        //匿名对象
        new Student("热巴",18).show();// 没有名字的对象
        new Student("热巴",18).show();// 没有名字的对象

使用场景:

  • 当某个类的对象只需要使用一次的时候,就可以使用该类的匿名对象。

匿名对象做为:方法的参数

       // 调用method1方法
        Student stu2 = new Student("热巴",18);// 0x11901
        method1(stu2);// 有名字的对象传参
        method1(new Student("热巴",18));// 匿名对象的方式传参数

匿名对象做为:方法的返回值

 public  Student test(){
        //Student stu = new Student("丽颖",18);// 0x11908
        //return stu;// 0x11908
        return new Student("丽颖",18);
    }

标签:入门,对象,成员,System,day10,Student,println,事物
来源: https://www.cnblogs.com/wurengen/p/16412865.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有