🥰🥰🥰来都来了,不妨点个关注叭!
👉博客主页:欢迎各位大佬!👈
今天开始,我们就进入很重要的部分啦!本期内容讲解类和对象的知识点,这部分内容比较抽象,我们需要多多理解,但是不要有畏难的情绪哦!我们要相信自己,一定可以哒
文章目录
1. 初始面向对象
1.1 面向对象
Java是一门纯面向对象的语言(简称OOP),一切皆为对象,主要依靠对象之间的交互完成一件事情
1.2 面向过程
面向过程主要的特点是注重实现这个功能的步骤,每一步具体实现什么功能,且强调因果关系
1.3 面向对象和面向过程
以买一台电脑为例子
面向对象:【关注对象实体之间互相协作完成】
面向过程:【关注的是过程】
【注意】面向过程和面向对象并不是一种语言,而是一种思想,没有好坏之分,都有其特定的应用场景
2. 类的定义和使用
Q:为什么要有类?如何定义类?
这一系列的问题,让我们具体来看看吧!
类是对一个实体(对象)来进行描述的,主要描述该实体具有哪些属性(外观尺寸等),哪些功能(用来干什么),描述完成后,计算机才可以识别它,了解它具体是干嘛的
以下为定义类的语法
class 类名 {
属性
行为/功能
}
下面我们具体定义一个类,比如人类,有什么属性呢?一个人有名字,性别,年龄等等,有什么行为呢,在日常生活中,人需要吃饭喝水睡觉等等,这样我们构建类,如下:
class Person {
public String name;
public int age;
public String sex;
public void eat() {
System.out.println("吃饭");
}
public void drink() {
System.out.println("喝水");
}
public void sleep() {
System.out.println("睡觉");
}
}
一个类,其实可以理解为一个类型,只不过是自定义的类型
【注意事项】
- 类名采用大驼峰定义
- 目前就在成员之前定义public与方法之前不带static
- 一般一个文件当中只定义一个类
- public修饰的类必须要和文件名相同
3. 实例化类
3.1 如何实例化
那如何拿到对象呢?
要拿到对象,就必须先有类,用类类型创建对象,这个过程就是类的实例化,在Java中采用new关键字,实例化对象
举个例子看看吧!
比如上面一个例子定义了类->人,我们如何进行实例化对象呢?
class Person {
public String name;
public int age;
public String sex;
public void eat() {
System.out.print("吃饭 ");
}
public void drink() {
System.out.print("喝水 ");
}
public void sleep() {
System.out.print("睡觉 ");
}
}
public class Main {
public static void main(String[] args) {
Person person1 = new Person();
person1.name = "张三";
person1.age = 18;
person1.sex = "男";
System.out.print(person1.name+" "+ person1.age+" "+person1.sex+" ");
person1.drink();
person1.eat();
person1.sleep();
Person person2 = new Person();
person2.name = "李四";
person2.age = 20;
person2.sex = "女";
System.out.print(person2.name+" "+ person2.age+" "+person2.sex+" ");
person2.drink();
person2.eat();
person2.sleep();
}
}
打印结果如下:
从以上代码中,我们看到利用new关键字实例化对象,通过.调用属性、行为等,同时可以实例化多个对象
【注意事项】
1.类用来对一个实体进行描述,限定类的成员与行为
2.类相当于类型,是自定义类型,可用来定义变量
3.一个类可以实例化多个对象,实例化的对象占用实际物理空间,存储类成员变量
3.2 关于引用
【引用】指向对象 这个【对象】存储了地址
【注意事项】
1.引用为null赋值为null时候,含义是这个对象不指向任何对象
2.引用不能指向引用,只能是一个引用指向另一个引用指向的对象
4. this引用
4.1 this引用的含义
this引用是什么?this引用又有什么作用呢?
通过看以下的这段代码,可能会解决我们的问题
class Person {
String name;
String sex;
int age;
public void setData(String name,String sex,int age) {
name = name;
sex = sex;
age = age;
}
}
public class Main {
public static void main(String[] args) {
Person person1 = new Person();
person1.setData("zs","女",12);
System.out.println(person1.name+person1.sex+person1.age);
}
}
此时,就有了this引用,它的作用就是this引用指向当前对象,this.name指的是成员变量的属性name,其中将传进去的形参name的值赋给这个成员变量name
class Person {
String name;
String sex;
int age;
public void setData(String name,String sex,int age) {
this.name = name;
this.sex = sex;
this.age = age;
}
}
public class Main {
public static void main(String[] args) {
Person person1 = new Person();
person1.setData("zs","女",12);
System.out.println(person1.name+person1.sex+person1.age);
}
}
4.2 this引用的三种应用
【1】this.data 访问当前对象的成员变量,如上述例子,则是访问当前对象的成员变量
【2】this.func() 访问当前对象的成员方法
【3】this() 调用当前对象的其他构造方法,在下面会讲到构造方法
4.3 this的特性
【1】this只能在"成员方法"中使用,不能调用静态成员方法和属性
【2】在"成员方法"中,this只能引用当前对象,不能再引用其他对象
【3】this的类型,必须对应类类型引用,简单的说,就是哪个对象调用就是哪个对象的引用类型
【4】每个成员方法第一个参数默认是this
5. 构造方法
5.1 基本概念
【构造方法】构造方法是一个特殊的成员方法,名字必须与类名相同,创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次
注意事项:千万不要加void,加void就不是构造方法了,没有返回值类型
1.如果你没有写构造方法,此时Java会帮我们提供一个默认的不带参数的构造方法
2.如果写了则会调用自己写的,并且只会调用一次!!!
3.只要自己写了构造方法,Java都不会给你提供默认的构造方法!!!
5.2 具体用法
class Person {
String name;
String sex;
int age;
public Person() {
System.out.println("不带参数的构造方法");
}
public Person(String name, String sex, int age) {
this.name = name;
this.sex = sex;
this.age = age;
System.out.println("调用带三个参数的构造方法");
}
}
public class Main {
public static void main(String[] args) {
Person person1 = new Person("zs","女",12);
System.out.println(person1.name+person1.sex+person1.age);
}
}
5.3 重载
【重载】方法名必须相同,参数列表不同,返回值无影响
此时上面的两个Person方法构成重载
6. 成员变量和局部变量
【成员变量】定义在方法外部,类的内部(java中无全局变量的概念)
【局部变量】定义在方法的内部
【成员变量】没有赋值也可以打印默认值,如int类型默认值为0,引用类型默认为null
【局部变量】必须初始化
7. 对象打印
public class Student {
private int sno;//学号
public String sex;//性别
public int score;//分数
public String name;//姓名
public Student(int sno, String sex, int score, String name) {
this.sno = sno;
this.sex = sex;
this.score = score;
this.name = name;
}
}
class Test {
public static void main(String[] args) {
Student s1 = new Student(123,"女",99,"小小");
System.out.println(s1);
}
}
打印的结果为:
如果我们想打印这个对象的属性,比如她的学号、性别、分数和姓名,如何做呢~
在Student类中重写toString()方法
@Override
public String toString() {
return "Student{" +
"sno=" + sno +
", sex='" + sex + '\'' +
", score=" + score +
", name='" + name + '\'' +
'}';
}
//编译器自己提供的toString方法,也可以自己重写~
本期内容就到这里结束啦,对Java的类和对象有一定的了解了叭~下期我们继续讲解类与对象的相关知识!