前面二白的九讲属于Java基础方面的内容,总体来说偏基础和简单,能完成的操作也有限,有兴趣的同学可以写一写相关的管理系统,后面二白也会上传一些自己敲的小系统,下面就要开始Java面对对象的知识内容了,从这里开始已经会有点抽象和难以理解,为了以后二白自己复习,也方便大家理解,二白在这里尽量详细写一写,有不足之处还请理解。
一、类与对象的概念
前言:
变量:存储数据的空间(装数据的容器),变量中只能存储一个数据
数组:存储数据的空间(装数据的容器),数组中可以存储多个数据,多个数据类型要一致
对象:存储数据的空间(装数据的容器),对象中可以存储多个数据(通过属性来体现),多个数据类型可以不同
集合:存储数据的空间(装数据的容器),集合中可以存储多个数据,多个数据类型可以不同,也可以通过泛型要求多个数据类型相同
文件:存储数据的空间(装数据的容器),将不同类型的数据通过程序将数据存储到计算机的某些文件中
数据库:存储数据的空间(装数据的容器),专门用来存储数据和管理数据的技术,由专门的语言(SQL语句)用来操作数据库中的数据,数据库中可以存储多个不同类型的数据
那么什么是类与对象呢?
对象:现实世界中客观存在的物体都是对象,可以通过属性和方法来描述这个对象
属性:描述对象的静态特征,描述对象具有的特点
方法:描述对象的动态特征,描述对象具有的功能
类:具有相同属性和方法的多个对象的集合(具有相同特征的多个物体可以归属为同一类)
类和对象的关系:
1)类是对象的抽象,对象是类的具体
2)类是对象的模板,对象是类的具体实例
以下通过代码来理解:
二、创建类与对象
如:
定义一个Student类,类中有姓名name、年龄age、爱好hobby三个属性,定义一个方法输出这个三个属性值
创建2个Student类对象,给这2个对象的属性赋值,并通过方法输出2个对象的属性值
package com.kgc.se.demo01;
/**
* @JdkVersion: 17
* @Author: 二白程序员
* @Date 2024/4/11 9:11
* QQ:1512015112
* VX:18056394367
*/
public class Student {
public String name = "神魔恋";
public int age = 18;
public String hobby = "敲代码";
public void show(){
System.out.println(name+"-"+age+"-"+hobby);
}
}
package com.kgc.se.demo01;
/**
* @JdkVersion: 17
* @Author: 二白程序员
* @Date 2024/4/11 10:17
* QQ:1512015112
* VX:18056394367
*/
public class StudentTest {
public static void main(String[] args) {
Student student = new Student();
student.show();
System.out.println("-------------------");
Student student1 = new Student();
student1.name="捞的一";
student1.age=10;
student1.hobby="打游戏";
student1.show();
}
}
三、定义类的语法
访问权限修饰符 class 类名{
定义属性
访问权限修饰符 数据类型 属性名[=数据];
定义方法
访问权限修饰符 返回值类型 方法名([参数列表]){
方法体代码块;
}
}
注意:
1)类的访问权限修饰符可以是public(公共的)、默认修饰符(什么都不写,也不写default)
2)类名采用大驼峰命名法(当类的名称由多个英文单词组成的时候, 每个单词的首字母都要使用大写字母)
3)类名要做到见名知意,通过类名就知道该类描述的对象信息
1.定义属性
语法规则:
访问权限修饰符 数据类型 属性名[=数据];
组成部分说明:
1)访问权限修饰符:描述该属性可以作用的范围,常用值有:
public:公共的,可以在任意地方被访问
protected :受保护的,可以被同一个包中的子类访问
默认修饰符:什么都不写,可以被同一个包中给的类访问
private:私有的,只能在当前类中被访问
2)数据类型:描述该属性的数据类型。
可以是8大基本数据类型,也可以是3大引用数据类型
3)属性名:描述属性的名称
属性名的命名规则与变量命名规则一致
4)[=数据]:描述属性的值
属性名之后可以给其赋值,也可以不赋值,一般情况都不赋值。如果你赋值了,那么通过该类创建出来的对象的该属性值都相同
2.定义方法
语法规则:
访问权限修饰符 返回值类型 方法名([参数列表]){
方法体代码块;
}
组成部分说明:
1)访问权限修饰符:描述该属性可以作用的范围,常用值有:
public:公共的,可以在任意地方被访问
protected :受保护的,可以被同一个包中的子类访问
默认修饰符:什么都不写,可以被同一个包中给的类访问
private:私有的,只能在当前类中被访问
2)返回值类型:描述调用该方法后,方法会返回一个什么类型的结果给你
返回值可以是8大基本数据类型,也可以是3大引用数据类型,需要在方法体代码块里通过return关键字来返回指定数据类型的数据,方法如果没有结果返回给你,返回值类型处写void(空)
3)方法名:描述方法的名称
方法名命名规则与变量命名规则一致
4)[参数列表]:描述该方法在调用的时候是否需要“原料”(参数),这个参数列表可写可不写
方法不需要参数列表的时候,()中是空的,该方法称之为无参方法,需要参数的时候,方法称之为有参方法
方法需要参数的时候,参数列表的形式为“数据类型 参数名1,数据类型 参数名2,...,数据类型 参数名n”,参数的数据类型可以是8大基本数据类型,也可以是3大引用数据类型
5)方法体代码块:描述方法功能的代码,可以是一行代码,也可以是多行代码
方法体代码块中的代码可以是前面学习的所有Java基础代码
四、方法
方法根据是否有参数分类:
无参方法:没有参数的方法
有参方法:有参数的方法
有参方法的参数列表中的参数可以是一个或者多个
有参方法的参数类型可以是8大基本数据类型,也可以是3大引用数据类型
方法根据是否有返回值分类:
无返回值的方法:没有返回值的方法,在定义方法时,返回值类型写void
有返回值的方法:有返回值的方法,在方法体内部使用return关键字返回结果
有返回值的方法,返回值类型处写返回的数据的类型
综上所述:
方法的表现形式有:
1)无返回值的无参方法
2)无返回值的有参方法
3)有返回值的无参方法
4)有返回值的有参方法
调用方法(不管是调用自己定义的方法还是其他人定义的方法),只需要遵守2个规则:
1)要什么给什么:按照方法的参数列表要求传递参数:参数列表规定了多少个参数、参数是什么类型什么顺序的,你就按照要求指定个数、指定类型和指定顺序传参
2)给什么接什么:方法有返回值的时候,你根据返回值的类型,使用对应类型变量接收这个返回值,如果不需要接收,可以直接将这个返回值输出
注意:
形参:定义方法或者调用方法时,看到的参数列表名称称之为形式参数,简称形参
实参:调用方法时根据参数列表要求实际传递进去的参数称之为实际参数,简称实参,我们不用关注形参的名称,只需要关注实参的类型和形参类型一致
方法的三种调用方式:
1)第一种方式:直接调用,不需要通过类名或者对象名调用,直接写方法名
要求:
在同一个类中的方法可以直接通过方法名调用,
注意:
非静态方法既可以直接调用非静态方法,也可以直接调用静态方法
静态方法只能直接调用静态方法,不能调用非静态方法
总结:
静态的只能调用静态的,非静态的什么都能调用
2)第二种方式:通过类名调用
要求:
方法是静态方法(使用static关键字修饰的方法)
注意:
静态方法也可以通过对象名调用
3)第三种方式:创建对象调用
在其他类中调用某个类里面的方法时,需要先创建方法所在类的对象,然后通过对象名调用方法
package com.kgc.se.demo04;
/**
* @JdkVersion: 17
* @Author: 二白程序员
* @Date 2024/4/11 13:51
* QQ:1512015112
* VX:18056394367
*/
public class MethodDemo02 {
public void m1(){
System.out.println("m1()方法");
}
public void m2(){
System.out.println("m2()方法");
m1();
m3();
}
public static void m3(){
System.out.println("使用static修饰的方法m3()");
//静态方法不能访问非静态方法
//m1();//Non-static method 'm1()' cannot be referenced from a static context
}
public static void m4(){
System.out.println("使用static修饰的方法m4()");
//静态方法可以直接访问静态方法
m3();
}
}
package com.kgc.se.demo04;
/**
* @JdkVersion: 17
* @Author: 二白程序员
* @Date 2024/4/11 13:52
* QQ:1512015112
* VX:18056394367
*/
public class MethodDemo02Test {
public static void main(String[] args) {
MethodDemo02 methodDemo02 = new MethodDemo02();
//通过对象调用m1()方法
methodDemo02.m1();
System.out.println("-------------------------");
//通过对象调用m2()方法
methodDemo02.m2();
System.out.println("-------------------------");
//通过对象调用m3()静态方法
methodDemo02.m3();
//通过类名调用m3()静态方法
MethodDemo02.m3();
System.out.println("-------------------------");
MethodDemo02.m4();
}
}