类的属性的默认值问题
在java中,如果定义类的使用,存在属性,但是没有给属性赋值, java会给定默认值。
基本数据类型的默认值:
整型:0
浮点型:0.0
char:' '
boolean:false
对象:null
重写toString()
该方法在打印对象的时候,会自动使用toString()方法,需要使用自定义的需重写Java提供的toString()
public String toString() {
return " Master [name ="+ name +" age ="+ age +" gender ="+ gender +" address =" + address+" dog= "+dog+"]";
}
}
类的初始化 -- 构造方法
构造方法:
访问修饰符 类名称() {
}
在java类中,如果没有自己定义构造函数,系统(JVM)会自动生成一个无参的构造,
方便我们构建一个属性都为默认值的对象。
但是当我们定义了一个构造函数之后,系统(JVM)将不再自动生成一个无参的构造,
如果需要这个无参,需要自己定义。
public class Master {
public String name;
public int age;
public String gender;
public String address;
public Dog[] dog;
public Master(String name, int age, String gender, String address,Dog[] dog) {
this.name = name;
this.age = age;
this.gender = gender;
this.address = address;
this.dog = dog;
}
//无参构造方法
public Master() {
}
构造函数的作用:
初始化属性!
this指针问题:
在java中,存在this关键字,这个关键字默认会指向当前对象
public class Master {
public String name;
public int age;
public String gender;
public String address;
public Dog[] dog;
public Master(String name, int age, String gender, String address,Dog[] dog) {
this.name = name;
this.age = age;
this.gender = gender;
this.address = address;
this.dog = dog;
}
}
static关键字:
static关键字可以修饰非常多的东西(如:属性、方法、类、语法块、导包)
|-- static可以修饰属性
|-- static可以修饰方法
|-- static还可以修饰类,注意,只能修饰内部类
|-- 静态导包
|-- static静态代码块
static修饰的代码,会提前加载到内存中,并且只有一份,属于该类,
因此:
静态方法中,无法直接调用非静态函数(属性)
被static修饰的属性和方法,不属于对象,属于该类
直接可以使用类名称.属性(方法)来调用。
public class TestStatic {
//非静态属性
public int age;
// 静态属性
public static int aa;
public void say() {
System.out.println("hello static ");
}
public static void sayHello() {
System.out.println("这个是一个静态方法");
}
{
// 构造代码块
}
static {
// 静态代码块
}
类的成员:
属性
方法
构造方法
静态属性
静态方法
构造代码块
静态代码块
类的成员加载(运行)顺序:
static修饰的属性和静态代码块最先运行(这两者之间看代码顺序),
之后才开始运行对象属性和构造代码块(这两者之间看代码顺序),
最后构造函数开始运行。
java(权限)访问修饰符:
public: 任何地方都可以正常访问该修饰符修饰的属性和方法
protected: 同包、同类、子类
缺省(默认): 同包、同类
private: 只能是当前类,不允许超过该类
注意:class类,只能被public和默认这两种访问修饰符修饰