构造方法+块+this
2021-10-13 本文已影响0人
公子请留步LookMe
构造方法 --- 做事情
1.作用:只有一个,构造当前类的对象
2.写法:权限修饰符 方法名字(必须与类名一致)(参数列表){}
3.用法:通过new关键字调用
4.特点:
1.每一个类都有构造方法,诺自己在类中没有定义,系统会默认提供一个无参数的构造方法,如果自己定义了构造方法,则默认无参数的构造方法即被覆盖
2.存在构造方法的重载.
public class TestConstructor {
public static void main(String[] args) {
//创建Person类的对象
/*1.每次new对象时,都会自动触发对应类中的构造方法*/
/*2.每一个类中都会默认存在一个没有参数的构造方法
*但是 如果提供了其他的构造方法,默认的无参构造就会被覆盖掉
*所以,我们要手动的提供无参构造,这样才能不传参数,也能创建对象*/
Person p = new Person();//new(实例化)一个默认带无参数的构造方法 (也就相当于new 一个对象 )
p.eat();
/*4.每次创建对象,都会执行一个构造方法
* 构造方法的作用:用来创建对象*/
Person p1 = new Person();
/*5.全参构造不仅可以创建对象,还可以给对象的所有属性赋值*/
Person p2 = new Person("泡泡",18,"车底");
System.out.println(p2.name);
System.out.println(p2.age);
System.out.println(p2.address);
}
}
//1.创建Person类 ,描述人这一类事物
class Person{
//2.定义属性
String name;
int age;
String address;
//3.创建方法
public void eat(){
System.out.println("端起了我的饭盆");
}
/*3.构造方法的格式:与本类类名同名,且没有返回值类型的方法*/
//4.1创建本类的无参构造---没有参数的构造方法
public Person(){
System.out.println("我是一个默认的构造方法");
}
//4.2创建本类的含参构造方法---含有参数的构造方法
public Person(int i){
System.out.println("我是一个带int的构造方法");
}
//4.3创建本类的全参构造--此构造方法的参数与本类的属性一致
public Person(String name, int age, String address) {
System.out.println("我是person类的全参构造方法");
this.name = name;
this.age = age;
this.address = address;
}
}
构造方法块
一.构造代码块:{}
1.位置:类里方法外
2.执行时机:每次创建对象时都会执行构造代码块,并且构造代码优先于构造方法
3.作用:用于提取所有构造方法的共性功能,
二.局部代码块{}
1.位置:方法里
2.执行时机:调用本局部代码块所处的方法时才会执行
3.作用:用于控制变量的作用范围,变量的值越小越好
public class TestBlock {
public static void main(String[] args) {
Pig pig = new Pig();
Pig pig1 = new Pig("狗肉",11);
}
}
//1.创建一个小猪类用来测试
class Pig{
//2.定义属性
String food;
int age;
//3.创建普通方法
//4.创建本本类的构造代码块
{
/* 构造代码块:{}
1.位置:类里方法外
2.执行时机:每次创建对象时都会执行构造代码块,并且构造代码优先于构造方法
3.作用:用于提取所有构造方法的共性功能,
*/
System.out.println("我是一个构造代码块");
System.out.println("黑猪肉!");
}
public void eat(){
System.out.println("小猪爱吃 狗肉");
//5.创建本类的局部代码块
{
/* 局部代码块{}
1.位置:方法里
2.执行时机:调用本局部代码块所处的方法时才会执行
3.作用:用于控制变量的作用范围变量的值越小越好
*/
System.out.println("我是一个局部代码块");
}
}
public Pig(){
// System.out.println("黑猪肉!");
System.out.println("我是无参构造方法");
}
public Pig(String food, int age) {
// System.out.println("黑猪肉!");
System.out.println("我是全参构造方法");
this.food = food;
this.age = age;
}
}
this:
1.特征和用法:当成员变量与局部变量同名时,可以使用this指定本类的成员变量,如果不使用this指定,打印的就是近处的这个局部变量,就近原则。
public class TestThis1 {
public static void main(String[] args) {
Dog dog = new Dog();
Dog dog1 = new Dog("黑天鹅");
}
}
//1.创建小狗类
class Dog{
//2.1创建本类的无参构造
public Dog(){
System.out.println("无参");
}
//2.2创建本类String类型 的有参构造
public Dog(String s){
/* 在含参构造中,调用无参构造的功能
* 规定:this关键字必须在构造函数的第一行
* 调用是单向的,不能双休 不然死循环
*/
this();
System.out.println("有参"+s);
}
}