zoukankan      html  css  js  c++  java
  • Java入门(2)Java常用关键字

    序言

    53个关键字

    在JAVA中目前一共有53个关键字:其中由51+2个保留字=53个关键字

    访问控制
    private
    protected
    public
    default 
     
     
     
     
     
     
    类、方法和
    变量修饰符
    abstract
    class
    extends
    final
    implements
    interface
    native
    new
    static
    strictfp
    synchronized
    transient
    volatile
    enum 
    void 
     
     
     
     
    程序控制
    break
    continue
    return
    do
    while
    if
    else
    for
    instanceof
    switch
    case
     
     
     
     
     
     
     
    错误处理
    try
    cathch
    throw
    throws
    finally 
    assert 
     
     
     
    包相关
    import
    package
     
     
     
     
     
     
     
     
    基本类型
    boolean
    byte
    char
    double
    float
    int
    long
    short
    null
    true
    false
     
     
     
     
     
     
     
    变量引用
    super
    this
     
     
     
     
     
     
     
    保留字
    goto
    const
     
     
     
     
     
     
     

     static

      1,想要实现对象中的共性数据的对象共享,可以将这个数据进行静态修饰。

      2,被静态修饰的成员,可以直接被类名所调用。也就是说,静态的成员多了一种调用方式。类名.静态方式。

      3,静态随着类的加载而加载,而且优先于对象存在。

      静态的注意:静态的生命周期很长。

      一句话来描述就是:方便在没有创建对象的情况下来进行调用(方法/变量)。

    This

      代表是本类类型的对象引用。

    Super 

      

    final

      1:这个关键字是一个修饰符,可以修饰类,方法,变量

      2:被final修饰的类是一个最终类,不可以被继承。

      3:被final修饰的方法是一个最终方法,不可以被覆盖。

      4:被final修饰的变量是一个常量,只能赋值一次。

    new

      堆内存用来存放由 new 创建的对象和数组,在堆中分配的内存,由 Java 虚拟机的自动垃圾回收器来管理。在堆中产生了一个数组或者对象之后,还可以在栈中定义一个特殊的变量,让栈中的这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或者对象,引用变量就相当于是为数组或者对象起的一个名称。

     Person per=new Person();

      在上述程序中实例化了一个对象per,在实例化对象的过程中需要在内存中开辟空间,这其中就包括栈内存和对内存。

      对象名称per被保存在了栈内存中(更加准确的说法是,在栈内存中保存的是堆内存空间的访问地址),而对象的具体内容,比如属性name和age,被保存在了堆内存中。因为per对象只是被实例化,还没有具体被赋值,所以都是默认值。字符串的默认值为null,int类型的默认值为0。前面也已经提到,堆内存空间必须使用new关键字才能开辟。

    java中常用的内存区域

    在java中主要存在4块内存空间,这些内存的名称及作用如下:

      内存空间:保存了引用的堆内存空间的地址。

      内存空间:保存每个对象的具体属性内容。

      全局数据区:保存static类型的属性。

      全局代码区:保存所有的方法定义。

    synchronized

    volatile

    transient

      Java中transient关键字的作用,简单地说,就是让某些被修饰的成员属性变量不被序列化,这一看好像很好理解,就是不被序列化,那么什么情况下,一个对象的某些字段不需要被序列化呢?如果有如下情况,可以考虑使用关键字transient修饰:

    1、类中的字段值可以根据其它字段推导出来,如一个长方形类有三个属性:长度、宽度、面积(示例而已,一般不会这样设计),那么在序列化的时候,面积这个属性就没必要被序列化了;

    2、其它,看具体业务需求吧,哪些字段不想被序列化;

    PS,记得之前看HashMap源码的时候,发现有个字段是用transient修饰的,我觉得还是有道理的,确实没必要对这个modCount字段进行序列化,因为没有意义,modCount主要用于判断HashMap是否被修改(像put、remove操作的时候,modCount都会自增),对于这种变量,一开始可以为任何值,0当然也是可以(new出来、反序列化出来、或者克隆clone出来的时候都是为0的),没必要持久化其值。

      最后,为什么要不被序列化呢,主要是为了节省存储空间,其它的感觉没啥好处,可能还有坏处(有些字段可能需要重新计算,初始化什么的),总的来说,利大于弊。

    资料

    https://www.cnblogs.com/AloneZ/p/java1.html

  • 相关阅读:
    docker常用命令
    redis常用命令
    Spring boot redis自增编号控制 踩坑
    docker 安装 nginx
    Linux常用命令记录
    leetcode-120. 三角形最小路径和
    leetcode-229.求众数(二)
    leetcode-169.求众数
    冒泡排序学习笔记
    快速排序学习笔记
  • 原文地址:https://www.cnblogs.com/cnki/p/8722109.html
Copyright © 2011-2022 走看看