目录
1.类和对象中的基本概念
1)类
类的定义模式

一个文件中可以定义多个类,但建议只定义一个类,通过这点我们就引出了“public class ****(类名)”和“class *****(类名)”的区别。
public class **** :如果类的定义中包含public,那么类名就一定要和文件名相同。
class ***** :若不包含public则可以随意。
注意:不论带不带public,类名的书写形式都是大驼峰
下面我们举例来定义一个狗类:
class Dog{
public String name;//名字(成员变量)
public int age;//年龄(成员变量)
public float weight;//重量(成员变量)
public void barks(){
System.out.println(name+"在叫");//成员方法
}
}
其中涉及到的成员和成员方法在下面会说明。
2)成员与对象
在一个类中,我们可以设定多个成员,如上面的狗类中,我们设定了狗的名字,年龄,重量。可以很明显的看出来成员的设置的方法:public+成员类型+成员名。那么又有小伙伴要问了,设置这么多成员我要怎么用呢?这就涉及到接下来我们要讲的“对象”了。让我们先看段代码。
public static void main(String[] args) {
Dog dog1 = new Dog();
dog1.name = "大黄";
dog1.age = 10;
dog1.weight = 15.5;
dog1.barks();
Dog dog2 = new Dog();
dog2.name = "小黑";
dog2.age = 5;
dog2.weight = 30.5;
dog2.barks();
}
上面这段代码中的“dog1和dog2”就被称为对象,不难看出一个类名可以定义多个对象,而一个对象也可以对多个成员进行赋值。我们把赋值的这个过程叫做对象的实例化。
有一点细节需要关注,就是对象实例化的区域:在类之中,在成员之外。
3)成员方法
定义完成员和对象后,不用说我们的下一步就是要输出我们定义的值,有些朋友会想那还不容易,直接利用System.out.println()就可以输出了,但在你需要对多个对象进行较长的输出时,这种方法就会降低效率,而成员方法就可以解决这个问题。我们还是拿狗类举例:
public void barks() {
System.out.println(name+"在叫");//成员方法
}
public void eat(){
System.out.println(name+"在吃东西");
}
public void text(){
System.out.println(name+age+"岁了");
}
我们通过成员方法定义了狗的三个属性和行为,当我们想输出这些语句时,只需要根据“对象名.成员方法名()”这种形式就可以输出了。也就意味这我们只需要修改对象名就可以改变语句,大大提高了效率。
4)构造方法
说到构造方法,我们可以与之前的成员方法做一个类比。但二者又有本质上的区别。且听我细细道来。
public Date(int year, int month, int day){
this.year = year;
this.month = month;
this.day = day;
System.out.println("Date(int,int,int)方法被调用了");
}
public void printDate(){
System.out.println(year + "-" + month + "-" + day);
}
public static void main(String[] args) {
// 此处创建了一个Date类型的对象,并没有显式调用构造方法
Date d = new Date(2021,6,9); // 输出Date(int,int,int)方法被调用了
d.printDate(); // 2021-6-9
}
每个new的对象都只能调用一次构造方法,如果想调用超过一次,则需要多个new的对象。
public class Date {
public int year;
public int month;
public int day;
// 无参构造方法
public Date(){
this.year = 1900;
this.month = 1;
this.day = 1;
}
// 带有三个参数的构造方法
public Date(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
无参构造方法可以理解为将对象的实例化在构造方法中进行了,当然,如果main中再次对其进行赋值,输出的结果就为第二次赋值的值。有参构造方法换句话说就是将实例化的过程简化到参数列表中,需要实现这种方法需要用到“this”,接下来我会说明。
2.this引用
为什么要有this呢?
public void setDay(int year, int month, int day){
year = year;
month = month;
day = day;
}
当我们的形参名不小心与成员变量名相同,编译器就会蒙逼,不知道调用谁。
这时候就需要用到this

如图,只需要在成员前加上this.就可以巧妙的解决上述问题,但神通广大的this也有缺陷,就是它只能用在成员方法。
3.封装
1)概念:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行 交互
2)
不同的包相互引用其实也是有前提条件的,不同的权限决定了包之间访问的程度,可以参考前面访问限定符的那张图。
下面是一些常见包的举例:

4.static成员
public class Student{
private String name;
private String gender;
private int age;
private double score;
private static String classRoom = "Bit306";
// 静态代码块
static {
classRoom = "bit306";
System.out.println("I am static init()!");
}
上述静态代码块就对静态成员进行了初始化,而静态代码块也有几点注意事项:

好了本次对java中类和对象的讲解就到此结束了,感谢观看!!!!
Java基础:类、对象、成员与构造方法详解





