zoukankan      html  css  js  c++  java
  • 2020年8月17日 面向对象的高级特性

    修饰符的学习围绕三个问题:

    (1)单词的意思

    (2)可以修饰什么?

    (3)用它修饰后有什么不同?

    7.1 关键字:final

    final:最终的

    用法:

    (1)修饰类(包括外部类、内部类类)

    表示这个类不能被继承,没有子类

    (2)修饰方法

    表示这个方法不能被重写

    (3)修饰变量(成员变量(类变量、实例变量),局部变量)

    表示这个变量的值不能被修改

    注意:如果某个成员变量用final修饰后,也得手动赋值,而且这个值一旦赋完,就不能修改了,即没有set方法

    7.2 关键字:native

    native:本地的,原生的 用法:

    只能修饰方法

    表示这个方法的方法体代码不是用Java语言实现的。

    但是对于Java程序员来说,可以当做Java的方法一样去正常调用它,或者子类重写它。

    JVM内存的管理:

    方法区:类的信息、常量、静态变量、动态编译生成的字节码信息

    虚拟机栈:Java语言实现的方法的局部变量

    本地方法栈:非Java语言实现的方法的局部变量,即native方法执行时的内存区域

    堆:new出来的对象

    程序计数器:记录每一个线程目前执行到哪一句指令

     

    7.3 关键字:static

    static:静态的

    用法:

    1、成员方法:我们一般称为静态方法或类方法

    (1)不能被重写

    (2)被使用

    本类中:其他方法中可以直接使用它

    其他类中:可以使用“类名.方法"进行调用,也可以使用"对象名.方法",推荐使用“类名.方法"

    (3)在静态方法中,我们不能出现:this,super,非静态的成员

     

    2、成员变量:我们一般称为静态变量或类变量

    (1)静态变量的值是该类所有对象共享的

    (2)静态变量存储在方法区

    (3)静态变量对应的get/set也是静态的

    (4)静态变量与局部变量同名时,就可以使用“类名.静态变量"进行区分

     

    3、内部类:后面讲

    4、代码块:静态代码块

     

    7.4 静态代码块

    1、语法格式:

    【修饰符】 class 类名{
       static{
           静态代码块;
      }
    }

    2、作用:

    协助完成类初始化,可以为类变量赋值。

     

    3、类初始化<clinit>()

    类的初始化有:

    ①静态变量的显式赋值代码

    ②静态代码块中代码

    其中①和②按顺序执行

    注意:类初始化方法,一个类只有一个

     

    4、类的初始化的执行特点:

    (1)每一个类的<clinit>()只执行一次

    (2)如果一个子类在初始化时,发现父类也没有初始化,会先初始化父类

    (3)如果既要类初始化又要实例化初始化,那么一定是先完成类初始化的

     

    7.5 变量的分类与区别

    1、变量按照数据类型分:

    (1)基本数据类型的变量,里面存储数据值

    (2)引用数据类型的变量,里面存储对象的地址值

    int a = 10;//a中存储的是数据值

    Student stu = new Student();//stu存储的是对象的地址值
    int[] arr = new int[5];//arr存储的是数组对象的地址值
    String str = "hello";//str存储的是"hello"对象的地址值

    2、变量按照声明的位置不同:

    (1)成员变量

    (2)局部变量

     

    3、成员变量与局部变量的区别

    (1)声明的位置不同

    成员变量:类中方法外

    局部变量:(1)方法的()中,即形参(2)方法体的{}的局部变量(3)代码块{}中

    (2)存储的位置不同

    成员变量:

    如果是静态变量(类变量),在方法区中

    如果是非静态的变量(实例变量),在堆中

    局部变量:栈

    (3)修饰符不同

    成员变量:4种权限修饰符、static、final。。。。

    局部变量:只有final

    (4)生命周期

    成员变量:

    如果是静态变量(类变量),和类相同

    如果是非静态的变量(实例变量),和所属的对象相同,每一个对象是独立

    局部变量:每次执行都是新的

    (5)作用域

    成员变量:

    如果是静态变量(类变量),在本类中随便用,在其他类中使用“类名.静态变量"

    如果是非静态的变量(实例变量),在本类中只能在非静态成员中使用,在其他类中使用“对象名.非静态的变量"

    局部变量:有作用域

  • 相关阅读:
    node.js
    js中文乱码问题
    238. Product of Array Except Self
    接下来要记得东西
    javascript 块内函数
    171. Excel Sheet Column Number
    Moore’s Voting Algorithm
    [ Python ] PIL
    [ Python ] KMP Algorithms
    房之事
  • 原文地址:https://www.cnblogs.com/douyunpeng/p/13518349.html
Copyright © 2011-2022 走看看