Java语言特性

Java语言特性

1 Java语言特性与Java程序运行过程

Java是一门面向对象的编程语言,通过在不同的平台搭建Java虚拟机JVM实现跨平台运行的特性。

Java程序运行时,通过编译器将.java文件编译成.class文件到达JVM,JVM为java程序分配运行时数据区,JVM解释一行字节码文件CPU执行一行字节码文件,既可以说Java是编译型语言,也可以说是解释型语言

2 Java面向对象特性

2.1 Java对象和类

Java程序的基本单位对象。而对象类的实例

抽取了结构相似的对象的相同点归结为类,每个对象都是某种类的一个实例。

类中成员有:

  • 域(类变量)
  • 初始化代码块(静态初始化代码块、普通初始化代码块)
  • 方法(普通方法、构造方法)
  • 内部类(内部类、内部枚举、内部接口)

类的示例:

class Test {

    // 1. 域
    int fieldOne; // 非静态,需类被实例化后才能初始化,存储在Java运行时数据区的堆

    static int fieldTwo; // 静态域,存储在Java运行时数据区的方法区中

    // 2. 初始化代码块
    {
        fieldOne = 1; // 普通代码块,需类被实例化后才能初始化存储在Java运行时数据区的堆
    }

    static {
        fieldTwo = 2; // 静态代码块,类被加载进JVM时初始化,存储在Java运行时数据区的方法区中
    }

    Test() {} // 构造方法

    void methodOne() {} //普通方法,存储在Java运行时数据区的方法区中

    static void methodTwo() { } //静态方法,存储在Java运行时数据区的方法区中

    // 3.1 内部类
    class InnerClass {
        int innerClassField;
    }

    // 3.2 内部枚举
    enum InnerEnum {

        ENUM_FIELD_ONE("A"),
        ENUM_FIELD_TWO("B"),
        ENUM_FIELD_THREE("C");

        String enumField;

        InnerEnum(String enumField) {
            this.enumField = enumField;
        }
    }

    // 3.3 内部接口
    public interface InnerInterface {

        void methodOne();

        void methodTwo();
    }
}

运行时数据区,主要为:

  • 方法区,存放(被JVM加载的)类信息,常量、静态变量
  • ,存放对象,引用(类中的引用),线程共享
  • Java虚拟机栈,方法执行时创建栈帧,存储局部变量、引用(方法局部变量引用)

类可以被类继承,继承后,子类拥有所有类成员,但对类成员的访问会被父类的成员的权限限定关键词所限制:

  • private,只有本类可以访问,子类不能访问,同包不能访问
  • 默认,包内可以访问
  • protected,包内可以访问,子类可以访问
  • public,不同包也可以访问

延申:

  • main方法、static修饰的域和方法不需要实例化类即可调用
  • 非main且非静态方法(即构造方法和普通方法)必须要先实例化一个对象才能被调用
  • 权限修饰符中protected权限大于默认(包外也可能被访问)

protected示例:

  1. 父类Test.java:
package hi;

public class Test {

    protected int fatherProtectedField;

    protected Test() {
        fatherProtectedField = 1;
    }
}
  1. 子类Test2.java:
package hello;

import hi.Test;

public class Test2 extends Test {

    Test2() {
        fatherProtectedField = 2; // 访问成功,原因:构造方法属于对象,对象实例化时会先实例化父类对象的域
    }

    void method() {
        fatherProtectedField = 3; // 同上
    }

    public static void main(String[] args) {
        fatherProtectedField = 4; // 访问失败。原因:main方法的执行没有实例化本类
        new Test2().fatherProtectedField = 4;
    }
}

引用:
引用,Java程序运行时,用于存储对象在堆中的地址。

引用可以访问对象的内容,使用操作符"."。

在运行时数据区中,引用可存放在堆中,也可存在Java虚拟机栈中。

多态:
父类引用指向子类对象,调用引用的方法的时候,根据具体指向的对象调用具体的方法。

封装和抽象:
封装的体现:

  • 对象对外屏蔽内部结构,通过引用调用对象提供的对外方法

抽象的体现:

  • 抽取结构相似的对象的相同点归结为类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值