复习回顾
- 类中有且仅有5大成分(五大金刚)
成员变量Field:描述类或者对象的属性信息的。
成员方法Method:描述类或者对象的行为的。
构造器(构造方法,Constructor): 初始化类的一个对象返回。
代码块:
内部类:
- 封装
面向对象的三大特征之一:封装,继承,多态。
形成了规范,即使毫无意义还是会这样写代码!
合理隐藏,合理暴露。
封装的规范:成员变量私有,方法一般公开,提供成套的getter和setter方法暴露成员变量的取值和赋值。
封装的作用:提高安全性,提高代码的组件化思想。
封装已经成为Java代码的规范,即使毫无意义,我们也要这样写代码(成员变量私有,方法公开)
- this关键字
this代表了当前对象的引用。
this可以出现在构造器和方法中。
this出现在构造器中代表构造器正在初始化的对象。
this出现在方法中,哪个对象调用方法,this就代表哪个对象。
this可以访问对象的成员变量,区分成员变量是局部的还是对象中的成员变量。
- static关键字
- 静态
- 修饰方法和变量都是属于类的,没有static修饰的方法和变量是属于每个对象的
1.类的定义格式
修饰符 class 类名{
// 类中的五大成分。
// 1.成员变量(属性)
// 2.成员方法 (行为)
// 3.构造器 (初始化类的对象数据的)
// 4.内部类
// 5.代码块
}
//例如
public class Student {
// 1.成员变量
public String name ;
public char sex ; // '男' '女'
public int age;
}
//如何通过类创建对象
类名 对象名称 = new 类名();
//例如创建一个学生对象
Student stu = new Student();
2.封装的步骤和步骤实现
- 使用private关键字来修饰成员变量。
- 使用public修饰getter和setter方法。
public class Student {
//private修饰成员变量
private String name;
private int age;
//pulbic修饰getter和setter方法
public void setName(String n) {
name = n;
}
public String getName() {
return name;
}
public void setAge(int a) {
if (a > 0 && a <200) {
age = a;
} else {
System.out.println("年龄非法!");
}
}
public int getAge() {
return age;
}
}
构造器
作用:通过调用构造器可以返回一个类的对象,构造器同时负责帮我们把对象的数据(属性和行为等信息)初始化好。
格式:
修饰符 类名(形参列表) {
// 构造体代码,执行代码
}
应用:
定义一个学生类
public class Student {
// 1.成员变量
public String name;
public int age;
// 2.构造器
public Student() {
System.out.println("无参数构造器被调用");
}
}
接下来通过调用构造器得到两个学生对象
public class CreateStu02 {
public static void main(String[] args) {
// 创建一个学生对象
// 类名 变量名称 = new 类名();
Student s1 = new Student();
// 使用对象访问成员变量,赋值
s1.name = "张三";
s1.age = 20 ;
// 使用对象访问成员变量 输出值
System.out.println(s1.name);
System.out.println(s1.age);
Student s2 = new Student();
// 使用对象访问成员变量 赋值
s2.name = "李四";
s2.age = 18 ;
System.out.println(s2.name);
System.out.println(s2.age);
}
}
this关键字的作用
作用:this代表所在类的当前对象的引用(地址值),即代表当前对象
应用:用于getter和setter方法,this出现在实例方法中,谁调用这个方法(哪个对象调用这个方法),this就代表谁(this就代表哪个对象)
public class Student {
private String name;
private int age;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setAge(int age) {
if (age > 0 && age < 200) {
this.age = age;
} else {
System.out.println("年龄非法!");
}
}
public int getAge() {
return age;
}
}
static关键字
static关键字的使用,他可以用来修饰成员变量和成员方法,被static修饰的成员是属于类的放在静态区中,没有static修饰的成员变量和方法则是属于对象的。
有static修饰成员变量,说明这个成员变量是属于类的,这个成员变量成为类变量或者静态成员变量。直接用类名访问即可。因为类只有一个,所以静态成员变量在内存区域中也只存在一份,所有的对象都可以共享这个变量。
定义格式
修饰符 static 数据类型 变量名 = 初始值;
//举例
public class Student {
public static String schoolName = "黑龙江八一农垦大学"; // 属于类,只有一份。
// .....
}
静态成员变量的访问:
格式:类名.静态变量
public static void main(String[] args){
System.out.println(Student.schoolName); // 黑龙江八一农垦
Student.schoolName = "哈工大";
System.out.println(Student.schoolName); // 哈工大
}
实例成员变量的访问:
无static修饰的成员变量属于每个对象的,这个成员变量叫实例变量,之前我们写成员就是实例成员变量,需要注意的是 实例成员变量属于每个对象,必须创建类的对象才能访问。
格式:对象.实例成员变量
静态方法及其访问
有static修饰成员方法,说明这个成员方法是属于类的,这个成员方法称为类方法或者静态方法。直接用类名访问即可。因为类只有一个,所以静态方法在在内存区域中也只存在一份,所有的对象都可以共享这个方法。
格式:类名.静态方法名称
public class Student{
public static String schoolName = "传智播客"; // 属于类,只有一份。
// .....
public static void study(){
System.out.println("我们都在黑马程序员学习");
}
}
public static void main(String[] args){
Student.study();
}
实例方法及其访问
无static修饰的成员方法属于每个对象的,这个成员方法叫实例方法。需要注意的是 实例方法是属于每个对象,必须创建类的对象才可以访问
格式:对象.实例方法
public class Student {
// 实例变量
private String name ;
// 2.方法:行为
// 无 static修饰,实例方法。属于每个对象,必须创建对象调用
public void run(){
System.out.println("学生可以跑步");
}
// 无 static修饰,实例方法
public void sleep(){
System.out.println("学生睡觉");
}
public static void study(){
}
}
public static void main(String[] args){
// 创建对象
Student stu = new Student ;
stu.name = "徐干";
// Student.sleep();// 报错,必须用对象访问。
stu.sleep();
stu.run();
}
总结:
- 当static修饰成员变量或者成员方法时,该变量称为静态变量,该方法称为静态方法。该类的每个对象都共享同一个类的静态变量和静态方法。任何对象都可以更改该静态变量的值或者访问静态方法。但是不推荐这种方式去访问。因为静态变量或者静态方法直接通过类名访问即可,完全没必要用对象去访问。
- 无stataic修饰的成员变量或者成员方法,称为实例变量,实例方法,实例变量和实例方法必须创建类的对象,然后通过对象来访问。
- static修饰的成员属于类,会存储在静态区,是随着类的加载而加载的,而且只加载一次,所以只有一份,节省内存。存储于一块固定的内存区域(静态区),所以,可以直接被类名调用。它优先于对象存在,所以,可以被所有对象共享。
- 无static修饰的成员,是属于对象,对象有多少个,他们就会出现多少份,所以必须由对象调用。