一、类定义和使用
1、类的定义
class className {
field; //字段(属性)或者成员变量
sex;
color;
method; // 行为 或者 成员方法
public void barks() {
System.out.println(" wowowo");
}
}
- class为定义类的关键字,className是类的名字,{ } 是类的主体。
- 类中包含的内容称为类的成员,属性是用来描述类的,称为类的成员变量,方法主要是用来说明类具有那些功能,称为类的成员方法。
- 类只是一个模板,没有具体的意义。
- 一个源文件只能存在一个主类(主类必须和源文件名称相同),主类用public class定义。class声明的普通类可以存在多个。
2、类的实例化
类的实例化 -> 通过类产生对象,就称为类的实例化。
1、在Java中使用关键字class定义的类,相当于在计算机中产生了一个新的类型。
class Student --> Student 和String一样,是一个新的类型。
2、通过产生的新类型产生具体对象,称为类的实例化。使用new关键字来产生对象!
语法格式: 类名称 引用名称 = new 类名称();
Dog dog = new Dog();
产生了Dog类的实例化对象,可以通过该对象 ”." 操作符就可以访问成员属性和成员方法.
二、构造方法
1、构造方法
构造方法:初始化对象调用构造方法,构造方法是为了产生对象,给对象属性做初始化操作。
特点:
- 构造方法名字与类名称相同,无法自定义名称
- 构造方法没有返回值类型声明–void
- 构造方法在创建对象时,由编译器自动调用,且只在对象产生时调用一次。
- 若在定义类时,没有明确定义构造方法,则编译器会编译时产生默认的无参构造;若在类中定义了构造方法,则默认的无参构造就不再生成!
注意参数
class Dog{
String name;
String color;
Dog(){ //构造方法 这个{ } 是编译器自动生成的;
String name = null;
String color = null;
System.out.println("自己定义的无参构造方法");
}
}
2、构造方法的重载
- 可以有三个构造方法,无参的,有一个参数的,两个参数的;
三、this关键字
1、this 修饰成员变量
this.属性名称 --> 直接从类中寻找同名变量! 打破就近原则。
2、this 修饰方法
2.1、this 修饰成员方法,表示调用类中成员方法
语法: this.方法名称
2.2、this 调用构造方法(构造方法之间才可以相互调用)!!
语法: this(参数) // 表示调用构造方法
3、this 调用
就指的是通过哪个对象来调用的方法或属性,this 就指代谁!我们就可以把this当作一面镜子,当前镜子前站的是哪个对象,this就指代谁!
由上可知,dog通过this调用test 返回的是dog,同理,dog1 返回的是dog1.
四、static 关键字
首先,看见 static 关键字与对象无关!
static 表示静态,与类相关,和具体的对象无关!
1、static 修饰属性,称为类属性,静态属性,存放在JVM的方法区
即,static定义的属性,是类中所以成员所共有的。
可以直接用 类名称.( 类属性) 调用!,可以不赋初值,即为String类型默认值 null 。
注意:
引用值为null时,只有成员方法或成员变量才会NPE异常,静态方法静态变量不会报错!!
2、static修饰方法,类方法,直接通过类名称调用,与对象无关!
语法:类名称.方法名称()
调用静态方法的输出:
此外,像那些类的工具方法,如 Math.max(a,b) 就是通过Math类直接调用的。
3、static修饰静态域(静态属性,静态方法)和成员域(成员属性和方法)之间的联系
-
不能在静态方法中调用成员方法或成员变量!
因为static和对象无关,成员方法属性必须有对象才能调用。 -
可以在成员方法中调用静态属性或静态方法!
可以!,因为static没有对象就可以调用,何况有对象。 -
static不能直接修饰一个类,但是可以修饰内部类(一个类中嵌套一个类)!
因为类就是为了产生对象!
4、static变量的初始化
静态变量一般就地初始化或者在静态代码块中初始化。
五、代码块
代码块:使用 { } 定义的一段代码称为代码块。根据代码出现的位置以及关键字的不同,分为以下四种代码块。
1、普通代码块
直接定义在方法内部,不加任何修饰符定义的代码块称为普通代码块 —> 解决变量重名问题 (用的很少)
2、构造块
直接定义在类中,使用 { } 的代码块称为构造块。
3、静态代码块
一般用于初始化静态变量,使用static修饰,直接定义在类中。
语法:static { }
特点:静态代码块在类加载时执行一次,和具体产生对象无关! 若有多个静态代码块,按照代码的书写顺序一次执行!
注意:
主类中的静态代码块会优先于主方法执行!main存在于主类中,要执行方法首先得要将主类加载到JVM中,当主类一加载,主类中的静态代码块就被自动调用!