一.在Java中什么类与对象?
- 什么是对象:
- 不说人话:对象是一个应用系统中的用来描述客观事物的实体,是有特定属性和行为(方法)的基本运行单位。是类的一个特殊状态下的实例。对象可以是一个实体、一个名词、一个可以想象为有自己标识的任何东西,可以概括来说:万物皆对象。看不懂没关系,现在你可以把你眼前的一切都可以是一个对象
- 什么是类:
- 对一个实体(对象)来进行描述的就是类,
- 总结:
- 类是:对一个对象的属性及动作进行描述的一系列信息,
- 对象是:以一个类的一系列信息创建出来的一个对象(实体)
- (个人理解)类就是一张图纸,而对象则是根据这张图纸的信息创造出来的一个实体,
- 例:一个画师画了一张图纸,图纸上画了一个手机壳有长度 宽度 颜色 怎么用一系列信息,这可以理解为一个类,而拿着这个图纸创造出一个,手机壳,这个手机壳就可以;理解为对象,而创造这个对象的过程就叫实例化对象
二,类的定义与对象的实例化
- 那么在Java中类是怎么定义的呢?看以下代码,定义了一个学生的类,
图片1
public class Student {
//属性
public String name="张三";//姓名
public int age = 20;//年龄
//行为(动作)
public void say(){//说出自己的姓名与年龄
System.out.println(name);
System.out.println(age);
}
}
- 这时我们已经定义出了一个学生类了(相当于已经画好图纸了),那么就可以用这个类来实例化出一个对象了(拿着图纸创造出一个实体),代码如下,
图片2
public class Main {
public static void main(String[] args) {
Student student = new Student();//1
}
}
- 当1这行执行完后这时对象就已经实例化好了(用图纸创造出了一个实体),对象名为student,因为在类中设计了行为,现在就可以用对象名点(student.)这个行为了,代码容下,
图片3
public class Main {
public static void main(String[] args) {
Student student = new Student();//1
student.say();//2
}
}
- 运行结果如下,
图片4
- 现在基本的类的定义与对象的实例化都完成了,现在我们来学习构造方法
- 什么是构造方法呢,构造方法(也称为构造器)是一个特殊的成员方法,名字必须与类名相同,在创建对象时,由编译器自动调用,并且 在整个对象的生命周期内只调用一次,,
图片5
public class Student {
//属性
public String name;//姓名
public int age;//年龄
//行为(方法)
public void say(){//说出自己的姓名与年龄
System.out.println(name);
System.out.println(age);
}
//构造方法
public Student(String name, int age) {
this.name = name;
this.age = age;
}
}
- 构造方法在每一个类中都有,可以有多个(构造方法可以重载)
- 当没有构造方法时自动生成一个隐藏的空参构造方法自动调用,当有构造方法或多个构造方法时根据传的参数自动调用对应的构造方法
图片6
public class Student {
//属性
public String name;//姓名
public int age;//年龄
//行为(方法)
public void say(){//说出自己的姓名与年龄
System.out.println(name);
System.out.println(age);
}
//构造方法
public Student(String name, int age) {
this.name = name;
this.age = age;
}
//空参构造方法
public Student(){
}
}
- this的应用
- this() 调用构造方法
- this.变量(属性) 访问对象的成员变量(属性)
- this.方法名 访问对象方法
- this的作用 ,在图片6中的构造方法中当形参名与成员变量名相同时用this来区分形参与成员变量,如不加时如下图
图片7
public class Student {
//属性
public String name;//姓名
public int age;//年龄
//行为(方法)
public void say(){//说出自己的姓名与年龄
System.out.println(name);
System.out.println(age);
}
//构造方法
public Student(String name, int age) {
name = name;
age = age;
}
}
- 不加(this.)当成员变量名与形参名相同时默认是形参,形参自己给自己赋值,成员变量没有被赋值,运行结果如下
图片8
- 当成员变量没有被初始化或赋值时默认内容为
- 引用类型为null
- int \ byte \ long \short 为 0
- boolean 为 false;
- double \ float 为 0.0
- char 为 (不知道是个啥)
- 封装(修饰类 成员变量 成员方法 加上权限)
- public 在同一个包的同一个类中\同一包中的不同类\不同包中的子类\不同包的非子类都可以访问
- protected 在同一个包的同一个类中\同一包中的不同类\不同包中的子类中可以访问
- default(什么权限都不写时默认它) 在同一个包的同一个类中\同一包中的不同类中可以访问
- private 在同一个包的同一个类中可以访问
- 内部类
- 定义 :将一个类定义在另一个类或者一个方法的内部, 前者称为内部类,后者称为外部类
- 根据内部类定义的位置不同,可以分为
- 成员内部类(普通内部类:未被static修饰的成员内部类 和 静态内部类:被static修饰的成员内部类)
- 局部内部类(不谈修饰符)、匿名内部类,
- 那么如何实例化内部类 看图9
图片9
- 是不是感觉实例化内部类非常不好理解接下来我们学习static可以缓解理解难度
- static 修饰变量\方法\内部类都可以用外部类名点(变量名\方法名\内部类名)来访问
- static 修饰内部类 (静态内部类)
- 静态内部类的特点: 不属于某个具体的对象 在静态内部类中只能访问外部类中的静态成员,创建静态内部类对象时,不需要先创建外部类对象 如下图
图片10
- static 修饰成员变量,修饰成员方法
- 静态成员变量特点: 不属于某个具体的对象 无论用这个类实例化多少个对象静态成员变量都是通用一个 如下图
- 静态成员方法的特点: 是类的方法,不属于某个具体的对象 可以通过类名.静态方法名(...)调用,不能在静态方法中访问任何非静态成员变量
图片11