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虚拟机栈中。

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

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

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

抽象的体现:

  • 抽取结构相似的对象的相同点归结为类
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,688评论 0 11
  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 1,267评论 0 2
  • 1. 多态 多态这种特性简而言之就是用父类型别的引用指向其子类的实例,然后通过父类的方法调用实际子类的成员函数. ...
    Garypalpus阅读 439评论 0 0
  • 面向对象主要针对面向过程。 面向过程的基本单元是函数。 什么是对象:EVERYTHING IS OBJECT(万物...
    sinpi阅读 1,091评论 0 4
  • 从JVM看Java语言特性(五) 成员内部类 1. 成员内部类 总的来说, 内部类其实就是在一个类中定义一个类, ...
    Garypalpus阅读 503评论 0 0