前言❤️❤️
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方法写的再靠前也无所谓
结语💕💕
这部分的知识可能会有点抽象,后面还要学习的抽象的概念更多
铁汁们刚学可能不是很理解,其实是正常的,这部分本身就是一个难点,现在不理解的点后序的代码中都会有体现到,慢慢在学习中就能逐渐理解
这一章博主刚学时也是不理解,后来写的代码多了,慢慢就能明白一些概念的意思😄🐵

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



被折叠的 条评论
为什么被折叠?



