首页 > 编程语言 >JAVA修饰符、运算符、循环语句

JAVA修饰符、运算符、循环语句

时间:2024-08-09 10:40:04浏览次数:14  
标签:操作数 JAVA 变量 int 修饰符 运算符 public

JAVA修饰符

修饰符用来定义类、方法或者变量,通常放在语句的最前端

一、访问修饰符

1、default默认访问修饰符:在同一包内可见,不使用任何修饰符,使用对象为类、接口、变量、方法,访问级别是包级别(package-level),即只能被同一包中的其他类访问
2、private私有访问修饰符:最严格的访问级别,所以被声明为private的方法、变量和构造方法只能被所属类访问,并且类和接口不能声明为private,声明为私有访问类型的变量只能通过类中公共的getter方法被外部类访问,主要用来隐藏类的实现细节和保护类的数据

public class Logger {
   private String format;
   public String getFormat() {
      return this.format;
   }
   public void setFormat(String format) {
      this.format = format;
   }
}

实例中,Logger类中的format变量为私有变量,所以其他类不能直接得到和设置该变量的值。为了使其他类能够操作该变量,定义了两个public方法:getFormat()(返回format的值)和 setFormat(String)(设置format的值)
3、public共有访问修饰符:被声明为public的类、方法、构造方法和接口能够被任何其他类访问。如果几个相互访问的public 类分布在不同的包中,则需要导入相应public类所在的包。由于类的继承性,类所有的公有方法和变量都能被其子类继承。

  • Java程序的main()方法必须设置成公有的,否则,Java解释器将不能运行该类。

4、protected受保护的访问修饰符:
(1)子类与基类在同一包中:被声明为protected的变量、方法和构造器能被同一个包中的任何其他类访问
(2)子类与基类不在同一包中:那么在子类中,子类实例可以访问其从基类继承而来的protected方法,而不能访问基类实例的protected方法

  • protected可以修饰数据成员,构造方法,方法成员,不能修饰类(内部类除外),接口及接口的成员变量和成员方法不能声明为protected
class AudioPlayer {
   protected boolean openSpeaker(Speaker sp) {
      // 实现细节
   }
}
 
class StreamingAudioPlayer extends AudioPlayer {
   protected boolean openSpeaker(Speaker sp) {
      // 实现细节
   }
}

父类使用了protected访问修饰符,子类重写了父类的 openSpeaker()方法,如果把openSpeaker()方法声明为 private,那么除了AudioPlayer外,其他类将不能访问该方法,只想让该方法对其所在类的子类可见,则将该方法声明为protected。
5、访问控制和继承
(1)父类中声明为public的方法在子类中也必须为public
(2)父类中声明为protected的方法在子类中要么声明为 protected,要么声明为public,不能声明为private
(3)父类中声明为private的方法,不能够被子类继承

二、非访问修饰符

1、static修饰符:用来修饰类方法和类变量
(1)静态变量:用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝。静态变量也被称为类变量。局部变量不能被声明为static变量。
(2)静态方法:用来声明独立于对象的静态方法。静态方法不能使用类的非静态变量。静态方法从参数列表得到数据,然后计算这些数据。

  • 对类变量和方法的访问可以直接使用classname.variablenameclassname.methodname的方式访问。

3、实例

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");
   }
}
Starting with 0 instances
Created 500 instances

2、final修饰符
(1)final变量:变量一旦赋值后,不能被重新赋值。被 final修饰的实例变量必须显式指定初始值。final修饰符通常和 static修饰符一起使用来创建类常量。
(2)final方法:父类中的final方法可以被子类继承,但是不能被子类重写。声明final方法的主要目的是防止该方法的内容被修改。

public class Test{
    public final void changeName(){
       // 方法体
    }
}

(3)final类:不能被继承
3、abstract修饰符
(1)抽象类:不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充。一个类不能同时被abstract和final修饰。如果一个类包含抽象方法,那么该类一定要声明为抽象类。抽象类可以包含抽象方法非抽象方法。
(2)抽象方法:一种没有任何实现的方法,该方法的具体实现由子类提供,不能被声明成final和static。任何继承抽象类的子类必须实现父类的所有抽象方法,除非该子类也是抽象类。如果一个类包含若干个抽象方法,那么该类必须声明为抽象类。抽象类可以不包含抽象方法。抽象方法的声明以分号结尾。
4、synchronized修饰符:synchronized关键字声明的方法同一时间只能被一个线程访问。synchronized修饰符可以应用于四个访问修饰符。
5、transient修饰符:该修饰符包含在定义变量的语句中,用来预处理类和变量的数据类型。

public transient int limit = 55;   // 不会持久化
public int b; // 持久化

6、volatile修饰符

public class MyRunnable implements Runnable
{
    private volatile boolean active;
    public void run()
    {
        active = true;
        while (active) // 第一行
        {
            // 代码
        }
    }
    public void stop()
    {
        active = false; // 第二行
    }
}

通常情况下,在一个线程调用run()方法(在Runnable开启的线程),在另一个线程调用stop()方法。 如果第一行中缓冲区的active值被使用,那么在第二行的active值为false时循环不会停止。但是以上代码中使用了volatile修饰active,所以该循环会停止。

JAVA运算符

一、算术运算符

表格中的实例假设整数变量A的值为10,变量B的值为20

操作符 描述 例子
+ 加法 - 相加运算符两侧的值 A + B 等于 30
- 减法 - 左操作数减去右操作数 A – B 等于 -10
* 乘法 - 相乘操作符两侧的值 A * B 等于 200
/ 除法 - 左操作数除以右操作数 B / A 等于 2
% 取余 - 左操作数除以右操作数的余数 B%A等于0
++ 自增: 操作数的值增加1 B++ 或 ++B 等于 21
-- 自减: 操作数的值减少1 B-- 或 --B 等于 19

1、自增自减运算符

public class selfAddMinus{
    public static void main(String[] args){
        int a = 3;//定义一个变量;
        int b = ++a;//自增运算
        int c = 3;
        int d = --c;//自减运算
        System.out.println("进行自增运算后的值等于"+b);
        System.out.println("进行自减运算后的值等于"+d);
    }
}
进行自增运算后的值等于4
进行自减运算后的值等于2
  • int b = ++a; 拆分运算过程为: a=a+1=4; b=a=4, 最后结果为b=4,a=4
  • int d = --c; 拆分运算过程为: c=c-1=2; d=c=2, 最后结果为d=2,c=2

2、前缀自增自减法(++a,--a): 先进行自增或者自减运算,再进行表达式运算
3、后缀自增自减法(a++,a--): 先进行表达式运算,再进行自增或者自减运算

public class selfAddMinus{
    public static void main(String[] args){
        int a = 5;//定义一个变量;
        int b = 5;
        int x = 2*++a;
        int y = 2*b++;
        System.out.println("自增运算符前缀运算后a="+a+",x="+x);
        System.out.println("自增运算符后缀运算后b="+b+",y="+y);
    }
}
自增运算符前缀运算后a=6,x=12
自增运算符后缀运算后b=6,y=10

二、关系运算符

运算符 描述 例子
== 检查如果两个操作数的值是否相等,如果相等则条件为真 (A == B)为假
!= 检查如果两个操作数的值是否相等,如果值不相等则条件为真 (A != B) 为真
> 检查左操作数的值是否大于右操作数的值,如果是那么条件为真 (A> B)为假
< 检查左操作数的值是否小于右操作数的值,如果是那么条件为真 (A <B)为真
>= 检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真 (A> = B)为假
<= 检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真 (A <= B)为真

三、位运算符

应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型。位运算符作用在所有的位上,并且按位运算。
A = 00111100,B = 00001101

操作符 描述 例子
& 如果相对应位都是1,则结果为1,否则为0 (A&B)得到12,即00001100
如果相对应位都是0,则结果为0,否则为1 (A或B)得到61,即00111101
^ 如果相对应位值相同,则结果为0,否则为1 (A^B)得到49,即00110001
~ 按位取反运算符翻转操作数的每一位,即0变成1,1变成0 (〜A)得到-61,即11000011
<< 按位左移运算符。左操作数按位左移右操作数指定的位数 A <<2得到240,即11110000
>> 按位右移运算符。左操作数按位右移右操作数指定的位数 A >> 2得到15即1111
>>> 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充 A>>>2得到15即00001111

四、逻辑运算符

假设布尔变量A为真,变量B为假

操作符 描述 例子
&& 称为逻辑与运算符。当且仅当两个操作数都为真,条件才为真 (A && B)为假
称为逻辑或操作符。如果任何两个操作数任何一个为真,条件为真 (A B)为真
称为逻辑非运算符。用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false !(A && B)为真
  • 短路逻辑运算符:当使用与逻辑运算符时,在两个操作数都为true时,结果才为true,但是当得到第一个操作为false时,其结果就必定是false,这时候就不会再判断第二个操作了

五、赋值运算符

操作符 描述 例子
= 简单的赋值运算符,将右操作数的值赋给左侧操作数 C = A + B将把A + B得到的值赋给C
+= 加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数 C + = A等价于C = C + A
-= 减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数 C - = A等价于C = C - A
*= 乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数 C * = A等价于C = C * A
/= 除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数 C / = A,C 与 A 同类型时等价于 C = C / A
(%)= 取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数 C%= A等价于C = C%A
<< = 左移位赋值运算符 C << = 2等价于C = C << 2
>> = 右移位赋值运算符 C >> = 2等价于C = C >> 2
&= 按位与赋值运算符 C&= 2等价于C = C&2
^ = 按位异或赋值操作符 C ^ = 2等价于C = C ^ 2
按位或赋值操作符

六、条件运算符(?:)

也被称为三元运算符。该运算符有3个操作数,并且需要判断布尔表达式的值。该运算符的主要作用是决定哪个值应该赋值给变量。
variable x = (expression) ? value if true : value if false

public class Test {
   public static void main(String[] args){
      int a , b;
      a = 10;
      // 如果 a 等于 1 成立,则设置 b 为 20,否则为 30
      b = (a == 1) ? 20 : 30;
      System.out.println( "Value of b is : " +  b );
 
      // 如果 a 等于 10 成立,则设置 b 为 20,否则为 30
      b = (a == 10) ? 20 : 30;
      System.out.println( "Value of b is : " + b );
   }
}
Value of b is : 30
Value of b is : 20

七、instanceof运算符

用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)
( Object reference variable ) instanceof (class/interface type)
如果运算符左侧变量所指的对象,是操作符右侧类或接口(class/interface)的一个对象,那么结果为真

String name = "James";
boolean result = name instanceof String; // 由于 name 是 String 类型,所以返回真

如果被比较的对象兼容于右侧类型,该运算符仍然返回 true

class Vehicle {}
 
public class Car extends Vehicle {
   public static void main(String[] args){
      Vehicle a = new Car();
      boolean result =  a instanceof Car;
      System.out.println( result);
   }
}

true

八、Java运算符优先级

后缀(括号类、点操作符) > 一元(自增自减) > 乘性(* /%) > 加性 > 移位 > 关系(>>= <<=) > 相等 > 按位与 > 按位异或 > 按位或 > 逻辑与 > 逻辑或 > 条件 > 赋值 > 逗号

JAVA循环语句

一、while循环

while( 布尔表达式 ) {
  //循环内容
}

只要布尔表达式为 true,循环就会一直执行下去

二、do...while循环

对于while语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,也至少执行一次。do…while循环和 while循环相似,不同的是,do…while循环至少会执行一次

do {
       //代码语句
}while(布尔表达式);
public class Test {
   public static void main(String[] args){
      int x = 10;
 
      do{
         System.out.print("value of x : " + x );
         x++;
         System.out.print("\n");
      }while( x < 20 );
   }
}
public class Test {
   public static void main(String[] args){
      int x = 10;
 
      do{
         System.out.print("value of x : " + x );
         x++;
         System.out.print("\n");
      }while( x < 20 );
   }
}
value of x : 10
value of x : 11
value of x : 12
value of x : 13
value of x : 14
value of x : 15
value of x : 16
value of x : 17
value of x : 18
value of x : 19

三、for循环

for循环执行的次数是在执行前就确定的

for(初始化; 布尔表达式; 更新) {
    //代码语句
}
  • 最先执行初始化步骤。可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句
  • 然后,检测布尔表达式的值。如果为true,循环体被执行。如果为false,循环终止,开始执行循环体后面的语句
  • 执行一次循环后,更新循环控制变量
  • 再次检测布尔表达式。循环执行上面的过程

四、Java增强for循环

主要用于数组

for(声明语句 : 表达式)
{
   //代码句子
}
  • 声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等
  • 表达式:表达式是要访问的数组名,或者是返回值为数组的方法
public class Test {
   public static void main(String[] args){
      int [] numbers = {10, 20, 30, 40, 50};
 
      for(int x : numbers ){
         System.out.print( x );
         System.out.print(",");
      }
      System.out.print("\n");
      String [] names ={"James", "Larry", "Tom", "Lacy"};
      for( String name : names ) {
         System.out.print( name );
         System.out.print(",");
      }
   }
}
10,20,30,40,50,
James,Larry,Tom,Lacy,

五、break关键字

主要用在循环语句或者 switch 语句中,用来跳出整个语句块。break跳出最里层的循环,并且继续执行该循环下面的语句。

六、continue关键字

continue适用于任何循环控制结构中。作用是让程序立刻跳转到下一次循环的迭代。

  • 在for循环中,continue语句使程序立即跳转到更新语句。
  • 在while或者do…while循环中,程序立即跳转到布尔表达式的判断语句。
public class Test {
   public static void main(String[] args) {
      int [] numbers = {10, 20, 30, 40, 50};
 
      for(int x : numbers ) {
         if( x == 30 ) {
        continue;
         }
         System.out.print( x );
         System.out.print("\n");
      }
   }
}
10
20
40
50

标签:操作数,JAVA,变量,int,修饰符,运算符,public
From: https://www.cnblogs.com/shihongpin/p/18350349

相关文章

  • JavaScript toLocaleString() 方法
    定义和用法:toLocaleString()方法可根据本地时间把Date对象转换为字符串,并返回结果。语法:dateObject.toLocaleString()返回值dateObject的字符串表示,以本地时间区表示,并根据本地规则格式化。问题//Javascript中newDate().toLocaleString()在不同浏览器中的结果不一致的解决......
  • Java enum(枚举)
    在Java中,enum(枚举)是一种特殊的数据类型,允许你定义一组命名的常量。这些常量通常代表一个固定的、有限的集合。例如,一年中的季节、交通信号灯的状态,或者一副扑克牌的花色。基本用法一个基本的enum定义如下:publicenumSeason{WINTER,SPRING,SUMMER,FALL}这里,Season......
  • java 面向对象2
    1.对类的命名要起到见名知意的效果。对于属性成员最好用private修饰提高权限,使得数据的存储更加安全。一般来说对于类用大驼峰命名法每个单词首字母都是大写如图2.在java中没有指针的概念,但是存在引用所以this在使用的时候就可以通过'.'来访问成员。3.与c++类似不存在空参构造......
  • Java Optional
    Optional是Java8引入的一个容器类,用于处理可能为空(null)的值。它旨在减少NullPointerException(空指针异常)的发生,并提供一种更具表现力和安全的方式来处理可选值。Optional的基本概念Optional<T>:Optional是一个泛型类,可以包含类型为T的值,或者为空。非空值:Optional可以......
  • Java Stream
    JavaStream是Java8引入的一种强大工具,旨在简化数据处理操作。它允许开发者以声明性方式对集合或其他数据源执行一系列复杂的操作,如过滤、映射、规约等,从而提高代码的简洁性和可读性。以下是关于JavaStreamAPI的更详细的概述和示例,帮助你更好地理解其工作原理和应用场景。......
  • Java计算机毕业设计江理工大学生创新创业项目管理系统的设计与实现(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在当今社会,创新创业已成为推动经济发展、促进社会进步的重要力量。高校作为人才培养的摇篮,肩负着培养具有创新精神和实践能力的高素质人才的重任。江......
  • Java计算机毕业设计基于Android手机个人日记本(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在快节奏的现代生活中,个人情感的记录与表达成为了许多人寻求心灵慰藉的重要方式。随着智能手机的普及和移动互联网技术的飞速发展,移动应用成为了人们......
  • Java计算机毕业设计基于微信小程序的法律问题咨询系统设计与实现前端(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着法治社会的不断推进和公众法律意识的增强,人们对于便捷、高效获取法律咨询服务的需求日益增长。然而,传统法律咨询模式受限于时间、地域及高昂的成......
  • Java计算机毕业设计基于android的健身运动app演示录像220239(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着现代生活节奏的加快,健康问题日益受到人们的关注。健身运动作为一种积极的生活方式,不仅能够增强体质、提高免疫力,还能有效缓解工作与生活带来的压......
  • 基于java+springboot+vue基于scrapy的电商销售数据分析可视化管理系统网站万字文档和P
    前言......