目录
访问限定符(private、default、protected、public)
类的定义和实例化
Java是一门面向对象的语言,在面向对象的世界里,一切皆对象。面向对象是一种解决问题的思想,主要依靠对象与对象之间的交互完成一件事情。
类和对象是什么?
类是用来对一个实体(对象)来进行描述的,主要描述实体(对象)有哪些属性、有哪些功能,类是一种自定义类型,可以用来定义变量,在Java中,用类定义出的变量即为对象。
类的定义格式
在Java中定义类需要用到class关键字,具体定义格式如下:
class 类名(大驼峰命名方式){
field; // 属性或者字段变量
method; // 行为或者成员方法
}
//例如:
class Student{
public String name;
public String id;
public int age;
public void doHomeWork(){}
}
类中包含的内容称为类的成员、属性。属性主要是用来描述类的,称为类的成员属性或成员变量。方法主要说明类的主要功能,称为类的成员方法。
注意事项:
1.一般一个文件当中只定义一个类;
2.main方法所在的类一般要使用pubic修饰(注意:Eclipse默认会在public修饰的类中寻找main方法);
3.public修饰的类必须与文件名称相同;
4.不要轻易修改public所定义的类名。
类的实例化
什么是类的实例化?
定义了一个类,就相当于在计算机中定义了一种新的类型。我们可以根据所定义出的类来定义实例(对象),用类类型来创建实例的过程,称为类的实例化。
类的实例化举例:
class Student{
public String name;
public String id;
public int age;
public void doHomework(){
System.out.println(name + "写作业");
}
}
public class TestDemo {
public static void main(String[] args) {
Student student = new Student();
student.name = "张三";
student.doHomework();
}
}
关键字详解
static关键字
static修饰的成员变量,称为静态成员变量,静态成员变量的最大特性是:不属于某个具体的对象,是所有对象所共享的。
static修饰的成员方法,称为静态成员方法,是类的方法,不是某个对象所特有的。静态成员一般是通过静态方法来访问的。
静态成员变量特性
1.不属于某个具体对象,是类的属性,所有对象所共享的,不存储在某个对象的空间中;
2.既可以通过对象访问,也可以通过类名访问,一般推荐使用类名访问;
3.JDK7以前,HotSpot(Java虚拟机)中存储在方法区,JDK8以后,类变量存储在堆中;
4.生命周期伴随类的一生(即:随类的加载而创建,随类的销毁而销毁).
静态成员方法特性
1.不属于某个具体的对象,是类的方法;
2.可以通过对象调用,也可以通过类名.静态方法(...)调用,一般推荐使用后者;
3.静态方法没有隐藏的this引用参数,因此不能在静态方法中访问任何非静态成员变量;
4.静态方法中不能调用任何非静态方法,因为非静态方法有this参数,在静态方法中调用时无法传递this引用。
static成员变量的初始化
static成员变量的初始化分为两种:就地初始化和静态代码块初始化。
①就地初始化
class Student{
public String name;
public String id;
public int age;
public static String classRoom = "CSDN";//就地初始化
}
②静态代码块初始化
class Student{
public String name;
public String id;
public int age;
public static String classRoom;
//下为静态代码块初始化
static{
classRoom = "CSDN";
}
}
this关键字
this关键字代表的是对当前对象的引用,以此来访问当前对象在成员方法中所有成员变量的操作。
this的引用特性
1.this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型;
2.this只能在成员方法中使用;
3.在成员方法中,this只能引用当前对象,不能引用其他对象,具有final属性.
this的使用方法
1.this.成员变量(普通的成员变量,不能是静态的)
2.this.成员方法(普通的成员方法,不能是静态的)
3.this(),调用其他的构造方法,只能用在第一行。
封装
从语法层次上来说,就是把字段或者方法用private修饰符进行修饰,这样在类外,就不能拿到当前的字段和方法了,起到了封装作用。
访问限定符(private、default、protected、public)
Java中主要通过类和访问权限来实现封装:类可以将数据以及封装数据的方法结合在一起,访问权限可以控制方法或字段能否直接在类外使用,Java提供了四种访问限定符:
范围 | private | default | protected | public |
同一包中的同一类 | 可以访问 | 可以访问 | 可以访问 | 可以访问 |
同一包中的不同类 | 可以访问 | 可以访问 | 可以访问 | |
不同包中的子类 | 可以访问 | 可以访问 | ||
不同包中的非子类 | 可以访问 |
private: 即你无法访问,只有在同一个包同一个类中可以使用;
default:default权限是指什么都不写时的默认权限,在同一个包中可以访问,在其他地方不可以被访问;
protected:继承访问权限;
public:你可以访问,在任何地方都可以访问到.
构造方法
构造方法(也称为构造器)是一种特殊的成员方法,名字必须与类名相同,在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次。
特性 :
1.名字必须与类名相同;
2.无返回类型;
3.创建对象时由编译器自动调用,并且在整个对象的生命周期内只调用一次;
4.构造方法可以重载;
5.如果没有显式定义,编译器会生成一份默认的构造方法,该构造方法是没有参数的;
6.构造方法中可以通过this来调用其他构造方法来简化代码,但是this语句必须是构造方法中的第一条语句;
7.构造方法在绝大多数情况下用public修饰。
举例如下:
public class Data {
public int year;
public int month;
public int day;
//无参构造方法
public Data(){
this.year = 2022;
this.month = 2;
this.day = 22;
}
//带有三个参数的构造方法
public Data(int year, int month, int day){
this.year = year;
this.month = month;
this.day = day;
}
public void printData(){
System.out.println(year + "-" +month + "-" + day);
}
public static void main(String[] args) {
Data data = new Data();
data.printData();
Data data1 = new Data(2022, 2, 23);
data1.printData();
}
}
上述代码示例采用了构造方法重载,分别创建了无参数的构造方法和带有三个参数的构造方法,运行结果如下: