
日升时奋斗,日落时自省
目录
一、类和对象
1、什么面向对象
简单一点就靠对象完成一件事情,而我们之前了解的像C语言都是面向过程
事例:一件事,需要机器和人共同完成,这里的对象就是:机器、人;
2、类定义和使用
2.1对类的简单了解
类里面包含:属性、行为
属性:就好比是一个人的身高,体重,外貌等特征
行为:就好比是一个人在干什么
2.2类定义的格式
class Type{
//成员变量
//成员方法
}
class为定义类的关键字,Student为类的名字,{}中为类的主体
class Student{
public String name;
public int age;
public double weight;
public double high;
public void Student(){
System.out.println("三好学生");
}
}
3、类的实例化
3.1类的实例化是什么
没有实例化前相当于我们设置的只是一个空壳,没有实际存在,设定之后才能算是一个对象
public class Realize {
public static void main(String[] args) {
Student student=new Student();
student.name="小明";
student.age=20;
student.weight=120;
student.high=180;
student.person();
}
}
实例化图解

3.2对类和对象的解释
(1)类只是一个模型
(2)类是自定义模型
(3)实例化出的对象,占用实际的物理空间,存储类成员变量
4、this引用
4.1为什么要引用this呢
在一些特殊的情况下,我们不得不用,当然啦,最好还是都用上,能免很多疏漏
(1)形参名不小心与成员变量名相同
使用例:(错误)
class Date{
public int year;
public int month;
public int day;
public void setYear(int year,int month,int day) { //注意这里哦
year = year;
month = month;
day = day;
}
public void printDate(){
System.out.println(year+"-"+month+"-"+day);
}
public static void main(String[] args) {
Date date1=new Date();
Date date2=new Date();
Date date3=new Date();
date1.setYear(2022,8,3);
date2.setYear(2022,8,4);
date3.setYear(2022,8,5);
date1.printDate();
date2.printDate();
date3.printDate();
}
}
运行结果:

为什么会全部都是默认值呢, 是因为在setDate方法中赋值,只是局部变量自己给自己赋值了,并没有给成员变量赋值,这里就需要this来引用调用对象,如何使用?
更改处:(正确)

运行结果:

4.2this引用的解释
this引用指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该引用去访问
4.3this引用特性

(1)this的类型:对应类型引用,即那个对象调用就是哪个对象的引用类型
(2)this只能在“成员方法”中使用
(3)在"成员方法"中,this只能引用当前对象,不能再引用其他对象
5、对象的构造及初始化
5.1如何初始化对象
方法中未初始化会报错,作为成员变量未初始化不会报错,会直接默认为初始值
5.2构造方法
名字必须与类名相同,在创建对象时,由编译器自动调用,并且在整个对象的声明周期内只调用有一次。
public class realize {
public int year;
public int month;
public int day;
public realize(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
System.out.println("this方法调用");
}
public void printDate(realize this) {
System.out.println(this.year + "-" + this.month + "-" + this.day);
}
public static void main(String[] args) {
realize date1 = new realize(2022, 8, 3);
realize date2 = new realize(2022, 8, 4);
realize date3 = new realize(2022, 8, 5);
date1.printDate();
date2.printDate();
date3.printDate();
}
}
以上代码的构造方法:

5.3构造方法的特性
(1)名字必须与类名相同
(2)没有返回值类型,设置为void也不行
(3)构造方法可以重载
可以分为有参数的构造方法,还有无参数的构造方法
(1)无参数构造方法

(2)有参数构造方法

注意:this必须放在构造方法的第一条语句
不能形成环,(死循环)

例如这样就会构成死循环,报错
5.4就地初识化

直接在成员变量上初始化
6.封装
6.1封装是什么(简要理解)
面向对象三大特性:封装、继承、多态
封装:简单看就是对权限的限制,私密数据的是不能被看见的,而只留下公开的接口和对象进行交互。
6.2访问限定符
类可以将数据以及封装数据的方法结合在一起,访问权限用来控制方法或者字段能否直接在类外使用
| NO | 范围 | priva | defaul | protected | publ |
| 1 | 同一包中的不同类 | √ | √ | √ | √ |
| 2 | 同一包中的不同类 | √ | √ | √ | |
| 3 | 不同包中的子类 | √ | √ | ||
| 4 | 不同包中的非之类 | √ |
简单叙述:
public:就公共的意思,顾名思义能被看见
default:相当于范围增大了点,但还是属于隐私,这个也是默认权限
private:只有自己看见,其余人都看不见

天数修改成隐私之后,只能通过在一个类中访问,不能被其他类访问

![]()
6.3封装之包
使用import语句导入包
包就简单介绍一个:
import java.util.*;
这里的*就可以直接找你需要的类,但是更建议显式的指定要导入的类名,否则还是容易出现冲突
(1)自定义包(idea)

输入即可

7.static成员(静态成员)

这里就是static 修饰的就是sex ,在java中,被static修饰的成员就是静态成员变量,其不属于某个具体的对象
7.1static修饰成员变量
使用例:
接下来的静态变量是直接初始化的,是公用的,直接用对象调用
public class Student {
public String name;
public static String sex="男";
public int age;
public double score;
public Student(){
}
public Student(String name,int age,double score){
this.name=name;
this.sex=sex;
this.age=age;
this.score=score;
}
public static void main(String[] args) {
Student student1=new Student("张某",18,4.0);
Student student2=new Student("成某",28,3.0);
Student student3=new Student("李某",10,5.0);
System.out.println(student1.age);
System.out.println(student1.name);
System.out.println(student1.score);
System.out.println(Student.sex); //前面提及过静态修饰是对象操控的,直接用对象调用
}
}
静态方法特性:
(1)不属于某个具体对象,是类方法
(2)可以通过对象直接调用,也可以通过类名加点(.)调用
(3)不能在静态中访问非静态
8.代码块
代码块分为:普通代码快,实例代码块,静态代码块
这里我们就说一下实例代码块和静态代码块
(1)实例代码块:一般用来初识化实例1成员变量

(2)静态代码块:一般用于初始静态成员变量

区分就是静态代码块有一个static,实例代码块什么都没有
注意:静态代码块不管多少个对象,其只会执行一次
静态代码块是优先的,因为在jvm加载类时开辟空间并初始化的
多个静态代码块在一起,按先后顺序进行
9.内部类
解释:一个类定义在另一个类或者一个方法的内部,前者称为内部类,后者称为外部类
内部类中,受访问权限权限影响
使用例:

虽然都在同一个java文件中,但是编译过后都会形成单独的字节码文件
9.1内部类
(1)实例内部类
如果需要访问外部类,需要外部类.this.类名,因为在内部类会首先访问内部类的,没有之后再访问外部类,外部类没有,就真的没有了
外部类不能直接访问内部类,需要创建内部类的对象才能访问内部类

如何取实例内部类对象

(2)静态内部类:只能访问外部类的静态成员

如何取静态内部类对象

9.2局部内部类

局部类,在外部类的方法中又定义一个类,最小的红色方框是局部内部类
本文详细介绍了Java中的面向对象编程基础,包括类的定义和使用、对象的实例化、this引用、对象的构造与初始化、封装概念以及访问限定符。通过实例解析了类与对象的关系、this引用的作用、构造方法的特性和封装的重要性。此外,还涵盖了静态成员、代码块以及内部类的概念和用法。

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



