面向对象(二)

this关键字

this表示该类的一个引用,或者该类的一个对象,this代表哪个对象呢?哪个对象调用该方法,那么该方法中的this就代表这个调用者。

class Person{
    private int age;
    public void setAge(int age){
        this.age=age;
    }
    public int getAge(){
        return this.age;
    }
}

setAge中参数要做到见名之意的情况下会跟本来的类属性age重复,所以为了区分成员变量(实例对象)和局部变量,用this.age来表示成员变量的age。

构造函数

  • 类是一个抽象概念,要使用类,必须完成类的初始化,我们new。
  • 构造方法,我们要完成类的实例化,其实要使用new关键字来调用构造方法对类进行实例化。
  • 构造方法:他的方法名和类名相同,没有返回值类型,连void也没有。
  • 我们自己定义的类,默认存在一个空参的构造方法。
  • 一旦你在类中,自己手动定义了有参构造,那么默认无参构造就不存在了。如果你还想用空参构造,建议你把空构造函数手动写出来。

创建对象的步骤

Student s=new Student();

步骤:

  • 1)加载Student.class文件进内存
  • 2)在栈内存为s开辟空间
  • 3)在堆内存为学生对象开辟空间
  • 4)对学生对象的成员变量进行默认初始化
  • 5)对学生对象的成员变量进行显式初始化
  • 6)通过构造方法对学生对象的成员变量赋值
  • 7)学生对象初始化完毕,把对象地址赋值给s变量·

static关键字

  • static静态的,可以修饰成员变量,修饰变量,此变量为一个共享变量,被该类所有的对象所共享。
  • 被static所修饰的成员是随着类的加载而加载,是优先于对象存在。
  • 也可以修饰成员方法。
  • jdk1.7之前,静态变量是存在方法区的,从1.7开始到1.7之后,静态变量存在堆内存。
  • 静态成员属于类,建议通过类名直接调用, 不需要使用对象调用,当然你使用对象调用可以 ,但是不推荐。
  • 静态成员属于类,所以静态变量,也称之为类变量。

注意

  • 静态方法中,只能访问到静态成员,访问不到非静态成员。(被静态所修饰的成员,是随着类的加载而加载,是优先于对象而存在),即先有的访问不到后来才有的。
  • 非静态方法中,既可以访问静态的,也可以访问非静态的。
  • 静态方法中不能存在this关键字,this代表一个对象,是后来才有的,静态方法里面访问不到。

代码块

  • 代码块:就是被一对括号括起来的代码,根据代码块定义的位置不同,分为局部代码块,构造代码块,静态代码块,同步代码块

  • 局部代码块:定义在方法中的代码块。在方法中出现:限定变量生命周期,及早释放,提高内存利用率。

    public class MyTest {
    	public static void main(String[] args) {
        	{
            	int num=20;
            	System.out.println("局部代码块");
        	}
    	}
    }
    
  • 构造代码块:定义在类中,方法外。

    public class MyTest {
    {
        System.out.println("构造代码块执行了!");
    	}
    	public MyTest(){
        	System.out.println("空参构造执行了!");
    	}
    }
    

构造代码块,是每次创建对象时,都会执行,而且优于构造方法先执行。

  • 静态代码块:定义在类中方法外,使用了static修饰的代码块。静态代码块随着类的加载而加载。只加载一次。静态代码块只能访问静态成员。

    public class MyTest {
    static {
        System.out.println("静态代码块执行了!");
    }
    public MyTest(){
        System.out.println("空参构造执行了!");
    }
    

}
```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值