首页 > 编程语言 >无涯教程-Java - Non Access Modifiers函数

无涯教程-Java - Non Access Modifiers函数

时间:2023-12-12 21:32:53浏览次数:45  
标签:Non Modifiers Java 变量 void 修饰符 final static public

Java提供了许多非访问修饰符来实现许多其他功能。

  • static修饰符 : 用于创建类方法和变量的 。

  • final 修饰符 :用于最终确定类,方法和变量。

  • abstract 修饰符:用于创建抽象类和方法。

  • volatile 修饰符:用于线程的已同步。

static (Static)修饰符

Static变量

static 关键字用于创建独立于为该类创建的任何而存在的变量。无论类的数量如何,static 变量只有一个副本存在。

static 变量也称为类变量。局部变量不能声明为static 。

Static方法

static关键字用于创建将独立于为该类创建的任何存在的方法。

静态方法不使用定义它们的类的任何对象的任何变量。静态方法从参数中获取所有数据,并从这些参数中计算出某些内容,而不引用变量。

可以使用类名称,后跟点和变量或方法的名称来访问类变量和方法。

public class InstanceCounter {

   private static int numInstances=0;

   protected static int getCount() {
      return numInstances;
   }

   private static void addInstance() {
      numInstances++;
   }

   InstanceCounter() {
      InstanceCounter.addInstance();
   }

   public static void main(String[] arguments) {
      System.out.println("Starting with " + InstanceCounter.getCount() + " instances");

      for (int i=0; i < 500; ++i) {
         new InstanceCounter();
      }
      System.out.println("Created " + InstanceCounter.getCount() + " instances");
   }
}

这将产生以下输出-

Started with 0 instances
Created 500 instances

Final修饰符

Final变量

最终变量只能显式初始化一次。声明为final的引用变量永远不能重新分配以引用其他对象。

但是,可以更改对象内的数据。因此,可以更改对象的状态,但不能更改引用的状态。

对于变量, final 修饰符通常与 static 一起使用,以使常量成为类变量。

public class Test {
   final int value=10;

   //The following are examples of declaring constants:
   public static final int BOXWIDTH=6;
   static final String TITLE="Manager";

   public void changeValue() {
      value=12;   //= an error
   }
}

Final方法

最终方法不能被任何子类覆盖。如前所述,final修饰符可防止在子类中修改方法。

您可以在类声明中使用 final 修饰符声明方法,如以下示例所示:

public class Test {
   public final void changeName() {
      //body of method
   }
}

Final 类

使用声明为 final 的类的主要目的是防止该类被子类化。如果将某个类标记为final,则任何类都不能从final类继承任何功能。

public final class Test {
   //body of class
}

Abstract修饰符

Abstract类

抽象类永远无法化。如果将一个类声明为抽象类,则其唯一目的是扩展该类。

一个类不能同时是抽象类和最终类(因为不能扩展最终类)。如果一个类包含抽象方法,则该类应声明为抽象。否则,将引发编译错误。

抽象类可以同时包含抽象方法和常规方法。

abstract class Caravan {
   private double price;
   private String model;
   private String year;
   public abstract void goFast();   //an abstract method
   public abstract void changeColor();
}

Abstract方法

抽象方法是声明的没有任何实现的方法。方法主体(实现)由子类提供。抽象方法决不能是最终的或严格的。

任何扩展抽象类的类都必须实现超类的所有抽象方法,除非子类也是抽象类。

抽象方法以分号结尾。Example:public abstract sample();

public abstract class SuperClass {
   abstract void m();   //abstract method
}

class SubClass extends SuperClass {
   //implements the abstract method
   void m() {
      .........
   }
}

Synchronized修饰符

这是用于指示一种方法一次只能由一个线程访问的关键字。同步修改器可以与四个访问级别修改器中的任何一个一起应用。

public synchronized void showDetails() {
   .......
}

Transient 修饰符

变量被标记为瞬态,以指示JVM在序列化包含该变量的对象时跳过该特定变量。

该修饰符包含在创建变量的语句中,该语句位于变量的类或数据类型之前。

public transient int limit=55;   //will not persist
public int b;   //will persist

Volatile 修饰符

volatile修饰符用于让JVM知道访问该变量的线程必须始终将其自身的变量私有副本与内存中的主副本合并。

public class MyRunnable implements Runnable {
   private volatile boolean active;

   public void run() {
      active=true;
      while (active) {   //line 1
         //some code here
      }
   }

   public void stop() {
      active=false;   //line 2
   }
}

通常,在一个线程(您使用Runnable开始的那个线程)中调用run(),从另一个线程调用stop()。如果在第1行中使用了缓存的active值,则在第2行中将active设置为false时,循环可能不会停止,这就是您要使用 volatile 的时候。

参考链接

https://www.learnfk.com/java/java-nonaccess-modifiers.html

标签:Non,Modifiers,Java,变量,void,修饰符,final,static,public
From: https://blog.51cto.com/u_14033984/8791264

相关文章

  • Java并发(十八)----常见线程安全类及实例分析
    1、常见线程安全类StringIntegerStringBufferRandomVectorHashtablejava.util.concurrent(JUC)包下的类这里说它们是线程安全的是指,多个线程调用它们同一个实例的某个方法时,是线程安全的。Hashtabletable=newHashtable();​newThread(()->{  ......
  • 【双栈实现队列】Java——Stack类
    leetcode232.用栈实现队列题意:双栈实现队列;要求每个入队、出队操作均摊O(1)复杂度题解:用一个栈in维护入队元素,另一个栈out维护出队元素出队或取队头元素:首先判断栈out是否为空,如果为空,将栈in中的元素pop()到栈out中,那么栈out栈顶元素即为原队列队头元素。(米奇妙妙屋啊~)判断......
  • 【leetcode 239. 滑动窗口最大值】Java优先队列——PriorityQueue类
    leetcode239.滑动窗口最大值题目描述:1e5大小的nums[]数组中长度为k(1<=k<=1e5)的窗口的最大值题解:暴力求解O(n^2)会超时,需要O(nlogn)的解法使用大根堆优先队列维护窗口元素,每次取最大值复杂度降为O(1),堆结构维护复杂度O(logn)问:如果维护窗口[l,r]前[0,l-1]的元素不影......
  • Java 8 Stream 流的常用方法总结
    Java8Stream流的常用方法总结Java8引入了一个新的API:StreamAPI,它允许我们以声明式的方式处理数据集合。StreamAPI提供了一系列强大的方法,可以帮助我们更简洁、高效地处理数据。本文将总结Java8Stream流的常用方法,并提供相应的代码示例。1.创建Stream首先,我们需要了......
  • JavaScript 中栈与堆的区别
    每种编程语言都具有内建的数据类型,但它们的数据类型常有不同之处,使用方式也很不一样,比如C语言在定义变量之前,就需要确定变量的类型。在声明变量之前需要先定义变量类型。我们把这种在使用之前就需要确认其变量数据类型的称为静态语言。相反地,我们把在运行过程中需要检查数据类型......
  • 无涯教程-Java Access Modifiers函数
    Java提供了许多访问修饰符来设置类,变量,方法和构造函数的访问级别。四个访问级别是-default(默认):对当前包可见,不需要修饰符。private(私有):当前类可见。public(公共):都可见。protected(受保护):对当前包和所有子类可见。默认访问修饰符默认访问修饰符意味着我们......
  • 无涯教程-Java - Singleton Classes函数
    Singleton的目的是控制对象的创建,将对象的数量限制为一个。由于只有一个Singleton实例,因此Singleton的任何实例字段在每个类中只会出现一次,就像static字段一样。单例通常控制对资源的访问,例如数据库连接或Socket。例如,如果您仅对数据库的一个连接拥有许可证,或者JDBC驱动......
  • java文件的上传与下载
    1、文件上传下载1.1文件上传什么是文件上传?要将客户端(浏览器)大数据存储到服务器端,不将数据直接存储到数据库中,而是要将数据存储到服务器所在的磁盘上,这就要使用文件上传。为什么使用文件上传?通过文件上传,可以将浏览器端的大数据直接保存到服务器端。不将数据保存到数据库中......
  • Java Spring Boot 拦截器的使用小结
    很多时候,我们在开发项目中,总是希望在接口中,尽量进行业务处理,其余的事项交给其他组件来处理,比如:登录验证日志记录接口性能在SpringBoot中,正如大多数框架一样,可以用到拦截件进行处理,不管叫中间件还是拦截件,总之都是为了让我们更好的专注于业务,解耦功能。我们看看SpringB......
  • 《Effective Java》阅读笔记-第五章
    EffectiveJava阅读笔记第五章泛型第26条不要使用原生类型随着泛型的普及,这条没什么可说的。如果不知道具体类型,可以使用<?>来代替。第27条消除unchecked警告原生类型到泛型转换时,编译会有警告,可以使用@SuppressWarnings("unchecked")来消除警告。并且应该在尽可......