Java 几个比较关键的关键字

  • static
    • static variable
      • java中的static关键字可以修饰类成员field(成员变量和成员函数)。当一个类field被声明为static,表示在该field只会在类的生命周期中存在一个实体(或者说体现),无论有多少该类的实例被创建。
      • 使用static声明的field被称为类(静态)成员,没有用static声明的field称为实例成员。
      • 静态成员可以使用类名(class)调用,也可以使用实例名(instance)调用,而非静态成员只能用实例名调用
      • 静态变量只初始化一次,并为所有类实例共享
      • 语法:Class.variable               
<span style="white-space:pre">		</span>class Point {
              <span style="white-space:pre">		</span>int x, y, useCount;
              <span style="white-space:pre">		</span>public Point(int x, int y) { this.x = x; this.y = y;}
              <span style="white-space:pre">		</span>static final Point origin = new Point(0, 0);
         <span style="white-space:pre">	</span>}

          <span style="white-space:pre">	</span>public class StaticTest {
              <span style="white-space:pre">		</span>public static void main(String[] args) {
                  <span style="white-space:pre">		</span>Point p = new Point(1,1);
                  <span style="white-space:pre">		</span>Point q = new Point(2,2);
                  <span style="white-space:pre">		</span>p.x = 3;
                  <span style="white-space:pre">		</span>p.y = 3;
                  <span style="white-space:pre">		</span>p.useCount++;
            <span style="white-space:pre">			</span>p.origin.useCount++;
            <span style="white-space:pre">			</span>System.out.println("(" + q.x + "," + q.y + ")");
            <span style="white-space:pre">			</span>System.out.println(q.useCount);
            <span style="white-space:pre">			</span>System.out.println(q.origin == Point.origin);
            <span style="white-space:pre">			</span>System.out.println(q.origin.useCount);
              <span style="white-space:pre">		</span>}
   <span style="white-space:pre">		</span>}

         

    • static method
      • 静态方法属于类,不属于实例
      • 静态方法中只能使用静态变量,对于非静态数据必须通过新建实例进行调用
      • 静态方法中只能调用静态方法,对于非静态方法必须通过新建实例进行调用
      • 可以通过类名直接调用静态方法,语法:Class.methodName()
      • 静态方法不能使用this和super关键字进行调用

    • static blocks of code
在Java的语法中,可以使用{ }包含一些代码来进行执行。根据代码块的位置的不同,将代码块分为:
      • 普通代码块
      • 构造代码块
      • 静态代码块

这三种的区别是:
      • 普通代码块:存在于方法或者语句中
<span style="white-space:pre">		</span>public static void main(String[] args){
                    {
                         int a = 1;
                         System.out.println(a);
                    }

                    int b = 2;
                    System.out.println(b);
               <span style="white-space:pre">	</span>}

          普通代码块的执行顺序与代码的先后顺序一致。由此可见有没有{ },程序的执行都相同。

      • 构造代码块:直接存在于类的声明中
<span style="white-space:pre">		</span>public class Test{
                    {
                         System.out.println(“构造代码块”);
                    }

                    public Test(){
                        System.out.println(“构造方法”); 
                    }

                    ...
               <span style="white-space:pre">	</span>}

          构造代码块在每次类进行实例化时执行,并且执行次序优于构造方法。

      • 静态代码块:在构造代码块中加上static关键字就是静态代码块
          静态代码块在JVM加载类时执行,优先于构造方法和主方法,而且只执行一次。
静态代码块的用处:按理说,代码块可以使用在任何合适的地方,不过一般会用于数据库连接、API初始化和日志初始化等等。


  • final
    • final fields
      • final修饰静态变量必须在声明时给予初始值,final static修饰的原始变量或者String变量在编译时会转换为常量
      • final修饰的变量必须在声明时给予初始值 或者 在构造方法中进行复制,最终的意思就是final修饰的变量必须在实例对象创建时有初始值

    • final methods
      • final修饰方法是为了阻止子类复写或者覆盖该方法

    • final classes
      • final修饰类是因为该类的定义是完整的,不希望也不需要有子类
      • final修饰的类中的方法也是final的
      • final不能和abstract同时修饰一个类,final修饰的类是功能完整的,而abstract修饰的类是功能不完整的,两个关键字是相冲突的,显而易见,是不能同时使用的

  • abstract
    • abstract methods
      • abstract修饰的方法必须是在abstract修饰的类中,或者在enum中声明
      • 继承abstract类的非abstract子类必须实现该abstract类中abstract方法
      • abstract方法可以被覆盖

    • abstract classes
      • abstract类是不完整的或者被认为是不完整的
      • abstract类不能创建实例
      • abstract类的非abstract子类可以进行实例化,与此同时abstract父类的构造器和实例变量会执行或者进行初始化
      • abstract类中可以没有abstract方法,但是有abstract方法的类必须是abstract类 

  • transient
    • transient fields
      • transient关键字的作用是将那些会被系统服务(system service)进行持久化的类中某些字段排除在外
      • 这种系统服务比较常见的就是Java序列化,序列化会把实例对象持久化,而transient修饰的字段将不会被持久化
      • 参考博客:http://www.cnblogs.com/lanxuezaipiao/p/3369962.html

  • volatile
    • volatile fields
      • volatile的目的是线程安全,对于两个或多个线程同时对一个变量进行操作时,volatile会使变量保持一致性,也就是说volatile修饰的变量,一个时刻只能有一个线程对其操作。
      • volatile不能和final同时使用

  • synchronized
    • synchronized methods
          
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值