Java类和对象(一),空间存储,对象创建

前言❤️❤️

hello hello💕,这里是洋不写bug~😄,欢迎大家点赞👍👍,关注😍😍,收藏🌹🌹
接下来要进入Java中的一个重难点,类和对象的学习,这部分涉及到的知识点非常多,非常杂,类的学习几乎是占了JavaSE的一半,博主也会用8篇以上的博客来讲解这部分的内容🐵🐵🐵
这篇文章的内容包括最基础的类的定义,类中方法的调用,以及类的空间存储,帮助大家快速入门Java💪💪💪
请添加图片描述
🎇个人主页:洋不写bug的博客
🎇所属专栏:Java学习之旅,从入门到进阶
🎇铁汁们对于Java的各种常用核心语法(不太常用的也有😆),都可以在上面的Java专栏学习,专栏正在持续更新中🐵🐵,有问题可以写在评论区或者私信我哦~

1,类的介绍

类其实就是一种”高配的结构体“
所谓的结构体,其实就是一些自定义的类型,结构体就是把基本类型和其他结构体聚合一下,就通过这个结构体来表示现实中的一些概念
下面就是一个学生结构体,这个结构体里有学生的各种信息:

在这里插入图片描述

类是比较抽象的,一个事物,它的信息越多,就越具体;信息越少,就越抽象,在生活中的很多事物都是具体的,但是在编程中,是用不到这么多信息的,只需要提取部分信息即可
就比如说下面几个场景:

发奖学金:只需要知道学生的姓名,学号,班级,绩点

组织和平精英比赛:学生姓名,班级,段位

组织相亲:姓名,年龄,身高,是否单身

一个学生有太多的信息,这种只提取出部分有用的信息的做法,就叫做抽象。




抽象在C中是通过结构体来表示的,在Java中则是通过类来表示
那我们为什么说类是一种高配的结构体呢
因为C中的结构体只能表示事物的属性(变量)
Java中的类中既可以表示事物的属性(成员变量),又能表示行为(方法)

在C中定义一个Cat结构体,结构体里有小猫的名字,品种等信息
完成一些行为的实现,就必须在结构体外创建函数来表示

struct Cat{
       char * name;
       char * category
}

在这里插入图片描述

这样内聚性(代码之间的关联程度)就比较低,而我们在写代码时其实追求的是高内聚
这时候就体现了Java中类的好处,类中可以有属性,也可以有方法,这样做就提高了代码的内聚性。

2,对象简介

那么什么是对象呢,其实说来也很简单,不是男女朋友!
对象的英文是Object,翻译过来就是物体
通过 类 这种自定义类型创建的变量就称为 对象。

例如,在读取数据时经常用到Scanner,这个Scanner就是一个Java内置类,scanner就是它创建的一个对象。

import java.util.Scanner;

public class exercise {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
    }
}




基于一个类,我们可以创建出很多名字不同的变量,基于类来创建对象的过程,我们称之为“实例化”,创建出的对象也被称为实例

import java.util.Scanner;

public class exercise {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Scanner a = new Scanner(System.in);
        Scanner b = new Scanner(System.in);
    }
}

3,代码书写尝试

1,小狗(超详解)

创建一个为Dog的类,代码如下:

public class Dog {
    public String name;

    public String category;

    public int age;

    public void bark(){
        System.out.println("汪汪汪");
    }

    public void eat(String food){
        System.out.println(name + "正在吃 +" + food);
    }

    public void sleep(){
        System.out.println("正在睡觉");
    }

    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.name = "大黄";
        System.out.println(dog.name);

        dog.bark();
        dog.eat("狗粮");
    }
}
}

这一个类中就包含了小狗的名字,品种,年龄,以及方法,这就是类的特色。
里面有小狗的一些属性(变量)和行为(方法),这里的方法是可以传参的。
我们在main方法中创建一个对象,一般创建的格式是:
类名 对象名 = new 类名();
像Scanner那种,其实是特殊情况,括号里面再多加了一个System.in

这里我们可以发现,调用类中的方法,是对象名.方法(参数)
之前调用自己写的方法,都是方法(参数)

在这里插入图片描述




一个类可以创建很多很多的对象
也可以在main方法中新创建一个对象dog2,表示另一条狗

 public static void main(String[] args) {
        Dog dog = new Dog();
        dog.name = "大黄";
        System.out.println(dog.name);
        dog.bark();
        dog.eat("狗粮");

        Dog dog2 = new Dog();
        dog2.name = "毛毛";
        dog2.eat("肉");
    }

空间的分配就是这样的,每个对象,在堆中都有一块独立的内存
使用dog调用eat方法,会得到狗的名字
原理就是通过栈空间中的引用,找到堆空间中对应的名字

在这里插入图片描述




那铁汁们猜一下,类中的这些方法是保存在哪里了,堆中还是栈中?
在数组博客的第5部分,对Java内存进行了分析,提到了JVM的内存组成,截图和链接都放在下面了

在这里插入图片描述
数组博客

其实方法就是在方法区中,既不在堆中,也不在栈中




初学类时,都先用public + 类型 + 名字来定义成员变量(比如说名字,品种,年龄)

    public String name;

    public String category;

    public int age;




在Java中,通过紫色把这些成员变量给标注起来了(这个也可以在设置里更改)

在这里插入图片描述



这里建议铁汁们参照这个小狗类,创建下面的洗衣机类和学生类
在main方法中创建一下对象,调用一下方法
类的学习,只看是不行的,其实还是要自己去多练习

2,洗衣机

创建一个WashMachine(洗衣机)类

public class WashMachine {
    public String name;

    public String brand;

    public int price;

    public void wash(){
        System.out.println("洗衣服");
    }

    public void dry(){
        System.out.println("甩干方法");
    }

    public void setTime(){
        System.out.println("定时功能");
    }
}

3,学生

创建一个Student类
注:gender一般在写代码的取值是male/female,而不是man/woman

public class Student {
    public int id;

    public String name;

    public int age;

    public String gender;

    public double score;

    public void doHomework(){
        System.out.println("同学在做作业");
    }

    public void study(){
        System.out.println("同学在学习");
    }
}

4,类的书写规则

1,定义类的时候一般是要求一个文件夹中只定义一个类,右键src,创建的Java class就是一个文件。

在这里插入图片描述




当然,一个文件也可以有多个类,但是要求一个文件中只能有一个类设定为public
这里一个文件硬塞两个也不会报错,就是一个要改成class,这样有点乱,一般不推荐这样写




2,当指定了public类后,当前类的名字要跟文件的名字相同
就像上面那个Dog类,如果创建之后把名字改为Cat,这时候就会报错
这时候就需要alt + enter一下,把文件名字也改为Cat,就可以了

在这里插入图片描述
在这里插入图片描述




3,Java中无论在哪里,都没有“声明”这种说法

在C,C++中,当把函数定义,类定义写在main方法后面时,就需要在main方法写个声明,否则main方法是不知道有这个函数或者类的,也调用不了,这是因为C/C++是从上到下执行代码的
但是在Java中,就没有这样的说法,因为Java运行时会先对所有的类,方法之类的进行扫描,收集信息,再运行代码,这样main方法写的再靠前也无所谓

结语💕💕

这部分的知识可能会有点抽象,后面还要学习的抽象的概念更多
铁汁们刚学可能不是很理解,其实是正常的,这部分本身就是一个难点,现在不理解的点后序的代码中都会有体现到,慢慢在学习中就能逐渐理解

这一章博主刚学时也是不理解,后来写的代码多了,慢慢就能明白一些概念的意思😄🐵
在这里插入图片描述

🥳🥳大家都学废了吗?完结撒花~ 🎉🎉🎉

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值