1 构造方法
1.1 概念
构造方法是一种特殊的方法,它是一个与类同名且访问修改符和类的访问修改符相同的方法。对象的创建就是通过构造方法来完成,其功能主要是完成对象的创建或者对象的初始化。当类实例化一个对象时会自动调用构造方法
构造方法和其他方法一样也可以重载
1.2 形式和功能
可以无参也可以有参: 修饰符 类名(【参数】){ 代码…}
1.2.1 构造方法创建对象
- 无参构造创建对象
- 含参构造创建对象
public class P {
String name;
//当存在一个含参的构造方法时,无参构造将不再自动生成...
public P(){}
//含参构造
public P(String n){
name=n;
}
void eat(){
System.out.println("Test2_构造方法.eat()");
}
}
class T{
public static void main(String[] args) {
//无构造方法时系统会自动提供一个无参的构造方法
P t2 = new P();//无参构造创建对象
t2.eat();
//t是引用变量,引用的是对象的地址值。
//根据地址值找到对象,并获取对象的数据
P t = new P("张三");//含参构造创建对象
System.out.println(t.name);
}
}
1.2.2 构造方法赋值
public class P{
String name;
int age;
//赋值方式1:通过含参构造方法赋值
public P(String name,int age){
this.name=name;
this.age=age;
}
//赋值方式2:通过setXxx()方法赋值
public void setName(String name){
this.name=name;
}
public void setAge(int age){
this.age=age;
}
}
2 构造代码块和局部代码块
2.1 构造代码块
1、 在类的内部,方法外部的代码块。
2、 通常用于抽取构造方法中的共性代码。
3、 每次调用构造方法前都会调用构造代码块
4、 优先于构造方法加载
class c{
String country;
{
country="中国";
}
public c() {
System.out.println("1号选手,来自"+country);
}
public c(int a) {
System.out.println("2号选手,也来自"+country);
}
}
2.2 局部代码块
1、 在方法里面的代码块
2、 通常用于控制变量的作用范围,出了括号就失效
3、 变量的范围越小越好,成员变量会有线程安全问题
4、 总结:执行顺序:
构造代码块是最优先的,局部代码块顺序执行
class Student{
{
System.out.println("构造代码块1");
}
public void init(){
{
System.out.println("局部代码块");
}
}
{
System.out.println("构造代码块2");
}
}
2.3 静态代码块
随着类的加载而加载,并且只被加载一次,一般用于项目的初始化
static{...}
2.3 静态代码块、构造代码块、局部代码块区别
1、 静态代码块:在类加载时就加载,并且只被加载一次,一般用于项目的初始化
2、 构造代码块:在调用构造方法前会自动调用,每次创建对象都会被调用
3、 局部代码块:方法里的代码块,方法被调用时才会执行
4、 静态代码块:static{ },位置:在类里方法外
5、 执行顺序:静态代码块 - 构造代码块 - 构造方法 - 局部代码块
3 this关键字
3.1 概念
this代表本类对象的一个引用对象
构造函数中,this()必须放在第一行
3.2 当变量名相同时
当局部变量和成员变量同名时,用于区分。
public class P{
String name;
//当局部变量和成员变量同名时
public void run(String name){
//name=name;//变量的就近使用原则,这样用的都是最近的也就是一直在用局部变量的
this.name=name;//this调用成员变量
}
}
3.3 构造方法间的调用
class Animal{
public Animal(){
this("来福");//调用本类中的含参构造
System.out.println(name);
}
public Animal(String name){
System.out.println(name);
}
}
3.4 this和super的区别
1、 this代表本类对象的引用,super代表父类对象的引用。
2、 this用于区分局部变量和成员变量
3、 super用于区分本类变量和父类变量
4、 this.成员变量 this.成员方法() this(【参数】)代表调用本类内容
5、 super.成员变量 super.成员方法() super(【参数】),代表调用父类内容
6、 this和super不可以同时出现在同一个构造方法里,他们两个只要出现在构造方法里都得放在第一行
4 重写与重载的区别(Overload和Override的区别)
1、重载:是指同一个类中的多个方法具有相同的名字,但这些方法具有不同的参数列表,即参数的数量或参数类型不能完全相同
2、重写:是存在子父类之间的,子类定义的方法与父类中的方法具有相同的方法名字,相同的参数表和相同的返回类型
3、重写是父类与子类之间多态性的一种表现
4、重载是一类中多态性的一种表现
5 static关键字
5.1 概念
1、 是java中的一个关键字
2、 用于修饰成员(成员变量和成员方法)
5.2 特点
1、 可以修饰成员变量,成员方法
2、 随着类的加载而加载,优先于对象加载
3、 只加载一次,就会一直存在,不再开辟新空间
4、 全局唯一,全局共享
5、 可以直接被类名调用
6、 静态只能调用静态,非静态可以随意调用
7、 static不能和this或者super共用,因为有static时可能还没有对象
5.3 静态调用关系
静态只能调用静态(变量或者方法),非静态可以访问所有的不管是不是静态
6 final关键字
6.1 概念
1、 是java提供的一个关键字
2、 final是最终的意思
3、 final可以修饰类,方法,成员变量
6.2 特点
1、 被final修饰的类,不能被继承
2、 被final修饰的方法,不能被重写
3、 被final修饰的变量是个常量,值不能被更改
4、 常量的定义形式: final 数据类型 常量名 = 值