创建与初始化对象
使用new关键字创建对象
使用new关键字创建对象的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化以及对类中构造器的调用
类中构造器也成构造方法是在进行创建对象的时候必须要调用的,并且构造器有以下两个特点:
1.必须和类名相同
2.必须没有返回类型,也不能写void
定义有参构造器之后,如果想使用无参构造,必须显示的定义一个无参的构造
构造器必须要掌握
public class Person {
String name;
//实例化初始值
//使用new关键字本质是在调用构造器
//用来初始化值
public Person() {
}
//有参构造器:一旦定义了有参构造器,无参构造器就必须显示定义
public Person(String name) {
this.name = name;
}
}
public class demo2 {
public static void main(String[] args) {
Person person = new Person("喜羊羊");
System.out.println(person.name);
}
}
方法的重载
用this调用另一个构造器只能在构造器中使用,而且必须在构造器执行体第一条语句使用。
为什么要用this来调用另一个重载的构造器?而不是把另一个构造器的代码复制粘贴到这个构造器里?
从功能的实现上来看,复制、粘贴确实可以实现这个效果;
软件开发里有一个规则:不要把相同的代码书写两次以上。
软件是一个需要不断更新的产品,代码书写一次更利于更新和维护。
图的话可以去下面这个链接去理解,我感觉解释挺好的
this关键字 用法:
this可以修饰属性:
总结:当属性名字和形参发生重名的时候,或者属性名字 和局部变量重名的时候,都会发生就近原则,所以如果我要是直接使用变量名字的话就指的是离的近的那个形参或者局部变量,这时候如果我想要表示属性的话,在前面要加上:this.修饰
如果不发生重名问题的话,实际上你要是访问属性也可以省略this.
public class Person {
//属性
int age;
String name;
double height;
//空构造器
public Person(){
}
//有参构造器
public Person(int age,String name,double height){
this.age = age;
this.name = name;
this.height = height;
}
//方法:
public void eat(){
int age = 10;
System.out.println(age);//就近原则,age指的是离它近的age--》局部变量的age
System.out.println(this.age);//这里指代的就是属性的age
System.out.println("我喜欢吃饭");
}
}
static的用法
static可以修饰:属性,方法,代码块,内部类。
static修饰属性总结:
(1)在类加载的时候一起加载入方法区中的静态域中
(2)先于对象存在
(3)访问方式: 对象名.属性名 类名.属性名(推荐)
代码块
类的组成:属性,方法,构造器,代码块,内部类
代码块分类:普通块,构造块,静态块,同步块(多线程)
//构造块
{
System.out.println("------这是构造块");
}
//静态块
static{
System.out.println("-----这是静态块");
//在静态块中只能方法:静态属性,静态方法
System.out.println(sa);
b();
}
代码块执行顺序:
最先执行静态块,只在类加载的时候执行一次,
再执行构造块,(不常用)
再执行构造器,
再执行方法中的普通块。