Java面向对象进阶

一.成员变量

成员变量的概述
Java中的成员变量分为类属性和实例属性两种,类属性的作用域与该类的生命周期相同,而实例属性则从类的实例被创建起开始存在,直到系统销毁该实例,实例属性的作用域与其对应的实例的生命周期相同。
成员变量的使用
成员变量在使用之前,需要先声明,声明成员变量是在类的内部、方法的外部定义的变量,成员变量分为实例变量和类变量。实例变量作用域是当前所属实例的范围,类的成员变量的作用域是整个类范围。成员变量的声明给出变量名、变量类型以及其他特性,
其语法如下:

[<修饰符>][static][final]<变量类型><变量名>

注意: Java中虽然允许通过实例来访问类属性,但其可读性和明确性较低,所以在使用类属性时,应使用"类名+点操作符+类变量名"的方式。

二.this关键词

Java提供了一个this关键字,this关键字总是指向调用该方法的对象。
方法中调用方法或成员变量
this关键字最大的作用就是让类中的一个方法访问该类中的另一个方法或实例成员变量。
this可以代表任何对象,当this出现在某个方法体中时,其所代表的对象是不确定的,但其类型是确定的,其所代表的对象只能是当前类,只有当该方法被调用时,它所代表的对象才能被确定,谁在调用该方法,this就代表谁.
例题如下:

public class Hero{
       public void jump(){
             System.out.println("---英雄遇到了障碍需要跳过去---");
 }
       public void run(){
             System.out.println("---执行run()方法英雄正在奔跑---");
             System.out.println("her对象已经被创建内存地址为:"+hero.hashCode()+",它将实行jump方法");
             this.jump();
} 
}

java允许对象的一个成员直接调用,另一个成员,可以省略this前缀,即将上述run()方法修改为下形式也正确,代码如下:

public void run(){
            System.out.println("---执行run()方法英雄正在奔跑---");
            System.out.println("her对象已经被创建内存地址为:"+hero.hashCode()+",它将实行jump方法");
            jump();
}

注意:省略this前缀只是一种假象,虽然程序员省略了调用jump()方法之前的this,但实际此this依然存在

解决实例变量与局部变量同名的问题
大多数情况下,在方法中访问类中的实例成员变量无须使用this前缀,如果方法中的,一个局部变量的实例变量同名,但程序又需要在该方法中访问实例变量,则必须使用this前缀。

三.隐藏和封装

封装的概念
封装是面向对象的三大特征之一,它指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法实现对内部信息的操作和访问。
封装是面向对象编程语言对客观世界的模拟,客观世界中的属性均被隐藏在对象内部,外界无法直接操作和修改,如人的年龄属性只能随着岁月的流逝而增加,通常不能随意修改人的年龄。对一个类或对象实现良好的封装,可以实现以下目的:

(1)隐藏类的实现细节、
(2)让使用者只能通过事先预定的方法访问数据,从而可以在该方法中加入控制逻辑,限制对属性的不合理访问。
(3)可进行数据检查,从而有利于对象信息的完整性。
(4)便于修改,提高代码的可维护性。

实现良好的封装,需要从以下两个方面考虑:
(1)隐藏对象的属性和实现细节,不允许外部直接访问。
(2)暴露出方法,让方法控制对这些属性进行安全访问和操作。

因此,封装实际上有两个方面的含义:隐藏该隐藏的,暴露该暴露的。这两个方面都需要通过使用Java提供的访问控制符来实现.
使用访问控制符
private只是Java访问修饰控制符的一种,除private外,Java还提供了default、protected、和public。Java访问控制级别从小到大.

四.static关键词

java类的运行包括类加载和实例化两个阶段,当一个类被加载至JVM中,静态成员会被初始化,被static修饰的成员即为静态成员,静态成员包括静态代码块,静态属性和静态方法。静态成员不属于某个对象,仅属于静态成员所在的类。
静态成员变量
类的成员变量包含静态变量和实例变量。静态成员变量是被static关键字修饰的成员变量,静态成员变量属于其所在类,被类中的所有实例共享,静态成员可通过类直接访问,也可以直接通过类的实例访问。
静态变量和实例变量的区别包括以下两点:
(1)静态变量共享一块内存空间,在类加载过程中完成静态变量的内存分配即初始化,可以使用类直接访问静态成员变量。
(2)每创建一个实例,都会在堆内存中为其创建一块内存空间,每一个实例含有一个属于自身的实例属性。
静态方法
被static修饰的方法称为静态方法。静态方法也可通过类名直接访问。在使用静态方式时需要注意,静态方式中不能访问非静态的成员,如实例属性、实例方法。
静态方法通常作为工具方法,不会因为实例的不同而影响方法最终的执行效果。
其具体操作如下:

public class MathUtils {
       public static double square(double num){
            return num*num;
  }
       public static void mian(String[] args){
            double num=9.6;
            double result=MathUtils.square(num);
            System.out.println(num+"的平方="+result)
  }
}

静态代码块
静态方法在类加载后,虽然在内存中已经分配了内存空间,但只有显式地调用静态方法时,该方法才会被执行。
如果需要在类加载时执行某一操作,则可以使用静态代码块。静态代码块。静态代码块不存在任何方法体中,它在Java虚拟机加载类被执行。如果类中包含多个静态代码块,则Java虚拟机按照他们在类中出现的顺序依次执行,且每个静态代码块只会被执行一次。
其具体操作如下:

public class StaticBlock {
    static{
         System.out.println("---第一个静态代码块---");
}
    static{
         System.out.println("---第二个静态代码块---");
}
    static{
         System.out.println("---第三个静态代码块---");
}
    public static void mian(String[] args){
         System.out.println("---mian()方法被执行了---");
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值