自有服务器可以做网站吗,广告设计培训机构,几何图形生成网站,网站建设公司服务公司在Java语言中#xff0c;所有的变量在使用前必须声明。声明变量的基本格式如下#xff1a;
type identifier [ value][, identifier [ value] ...] ;
格式说明#xff1a;
type -- 数据类型。identifier -- 是变量名#xff0c;可以使用逗号 , 隔开来声明多个同类型变量…在Java语言中所有的变量在使用前必须声明。声明变量的基本格式如下
type identifier [ value][, identifier [ value] ...] ;
格式说明
type -- 数据类型。identifier -- 是变量名可以使用逗号 , 隔开来声明多个同类型变量。
int a, b, c; // 声明三个int型整数a、 b、c
int d 3, e 4, f 5; // 声明三个整数并赋予初值
byte z 22; // 声明并初始化 z
String s runoob; // 声明并初始化字符串 s
double pi 3.14159; // 声明了双精度浮点型变量 pi
char x x; // 声明变量 x 的值是字符 x。 Java 语言支持的变量类型有 局部变量Local Variables定义在方法、构造方法或语句块中的变量作用域只限于当前方法、构造方法或语句块中。局部变量必须在使用前声明并且不能被访问修饰符修饰。 成员变量Instance Variables定义在类中、方法之外的变量作用域为整个类可以被类中的任何方法、构造方法和语句块访问。成员变量可以被访问修饰符修饰。 静态变量Class Variables定义在类中、方法之外的变量并且使用 static 关键字修饰作用域为整个类可以被类中的任何方法、构造方法和语句块访问静态变量的值在程序运行期间只有一个副本。静态变量可以被访问修饰符修饰。 参数变量Parameters方法定义时声明的变量作为调用该方法时传递给方法的值。参数变量的作用域只限于方法内部。
public class RunoobTest {// 成员变量private int instanceVar;// 静态变量private static int staticVar;public void method(int paramVar) {// 局部变量int localVar 10;// 使用变量instanceVar localVar;staticVar paramVar;System.out.println(成员变量: instanceVar);System.out.println(静态变量: staticVar);System.out.println(参数变量: paramVar);System.out.println(局部变量: localVar);}public static void main(String[] args) {RunoobTest v new RunoobTest();v.method(20);}
}成员变量: 10
静态变量: 20
参数变量: 20
局部变量: 10 Java 参数变量
Java 中的参数变量是指在方法或构造函数中声明的变量用于接收传递给方法或构造函数的值。参数变量与局部变量类似但它们只在方法或构造函数被调用时存在并且只能在方法或构造函数内部使用。
accessModifier returnType methodName(parameterType parameterName1, parameterType parameterName2, ...) {// 方法体
} parameterType -- 表示参数变量的类型。parameterName -- 表示参数变量的名称。
在调用方法时我们必须为参数变量传递值这些值可以是常量、变量或表达式。
方法参数变量的值传递方式有两种值传递和引用传递。 值传递在方法调用时传递的是实际参数的值的副本。当参数变量被赋予新的值时只会修改副本的值不会影响原始值。Java 中的基本数据类型都采用值传递方式传递参数变量的值。 引用传递在方法调用时传递的是实际参数的引用即内存地址。当参数变量被赋予新的值时会修改原始值的内容。Java 中的对象类型采用引用传递方式传递参数变量的值。
public class RunoobTest {public static void main(String[] args) {int a 10, b 20;swap(a, b); // 调用swap方法System.out.println(a a , b b); // 输出a和b的值}public static void swap(int x, int y) {int temp x;x y;y temp;}
}运行以上代码输出如下a 10, b 20Java 局部变量
局部变量声明在方法、构造方法或者语句块中。局部变量在方法、构造方法、或者语句块被执行的时候创建当它们执行完成后变量将会被销毁。局部变量必须在使用前声明并且不能被访问修饰符修饰因为它们的作用域已经被限制在了声明它们的方法、代码块或构造函数中。局部变量只在声明它的方法、构造方法或者语句块中可见不能被其他方法或代码块访问。局部变量是在栈上分配的。局部变量没有默认值所以局部变量被声明后必须经过初始化才可以使用。
type variableName;
type -- 表示变量的类型。variableName -- 表示变量的名称。 局部变量必须在使用之前进行初始化否则编译器会报错。初始化可以在声明时或后面的代码中进行。如果在声明时未初始化变量将被赋予默认值如 int 类型的变量默认为 0boolean 类型的变量默认为 false引用类型的变量默认为 null。
局部变量只在声明它的方法、构造方法或语句块内可见其他方法、构造方法或语句块不能访问该局部变量。当方法、构造方法或语句块执行完毕后局部变量将被销毁其占用的内存也会被释放。
public class LocalVariablesExample {public static void main(String[] args) {int a 10; // 局部变量a的声明和初始化int b; // 局部变量b的声明b 20; // 局部变量b的初始化System.out.println(a a);System.out.println(b b);// 如果在使用之前不初始化局部变量编译器会报错// int c;// System.out.println(c c);}
} 在下面的例子中 age 变量没有初始化所以在编译时会出错
package com.runoob.test;public class Test{ public void pupAge(){int age;age age 7;System.out.println(小狗的年龄是 : age);}public static void main(String[] args){Test test new Test();test.pupAge();}
}以上实例编译运行结果如下:Test.java:4:variable number might not have been initialized
age age 7;^
1 error 成员变量实例变量
成员变量声明在一个类中但在方法、构造方法和语句块之外。当一个对象被实例化之后每个成员变量的值就跟着确定。成员变量在对象创建的时候创建在对象被销毁的时候销毁。成员变量的值应该至少被一个方法、构造方法或者语句块引用使得外部能够通过这些方式获取实例变量信息。成员变量可以声明在使用前或者使用后。访问修饰符可以修饰成员变量。成员变量对于类中的方法、构造方法或者语句块是可见的。一般情况下应该把成员变量设为私有。通过使用访问修饰符可以使成员变量对子类可见。成员变量具有默认值。数值型变量的默认值是0布尔型变量的默认值是 false引用类型变量的默认值是 null。变量的值可以在声明时指定也可以在构造方法中指定成员变量可以直接通过变量名访问。但在静态方法以及其他类中就应该使用完全限定名ObjectReference.VariableName。
成员变量的声明语法为
accessModifier type variableName; accessModifier --表示访问修饰符可以是 public、protected、private 或默认访问级别即没有显式指定访问修饰符。type -- 表示变量的类型。variableName -- 表示变量的名称。
与局部变量不同成员变量的值在创建对象时被分配即使未对其初始化它们也会被赋予默认值例如 int 类型的变量默认值为 0boolean 类型的变量默认值为 false。
成员变量可以通过对象访问也可以通过类名访问如果它们是静态成员变量。如果没有显式初始化成员变量则它们将被赋予默认值。可以在构造函数或其他方法中初始化成员变量或者通过对象或类名访问它们并设置它们的值。 实例
以下实例我们声明了两个成员变量 a 和 b并对其进行了访问和设置。注意我们可以通过对象访问成员变量也可以通过类名访问静态成员变量。
public class RunoobTest {private int a; // 私有成员变量apublic String b Hello; // 公有成员变量bpublic static void main(String[] args) {RunoobTest obj new RunoobTest(); // 创建对象obj.a 10; // 访问成员变量a并设置其值为10System.out.println(a obj.a);obj.b World; // 访问成员变量b并设置其值为WorldSystem.out.println(b obj.b);}}以上实例编译运行结果如下:a 10
b World
import java.io.*;
public class Employee{// 这个成员变量对子类可见public String name;// 私有变量仅在该类可见private double salary;//在构造器中对name赋值public Employee (String empName){name empName;}//设定salary的值public void setSalary(double empSal){salary empSal;} // 打印信息public void printEmp(){System.out.println(名字 : name );System.out.println(薪水 : salary);}public static void main(String[] args){Employee empOne new Employee(RUNOOB);empOne.setSalary(1000.0);empOne.printEmp();}
} 类变量静态变量
Java 中的静态变量是指在类中定义的一个变量它与类相关而不是与实例相关即无论创建多少个类实例静态变量在内存中只有一份拷贝被所有实例共享。
静态变量在类加载时被创建在整个程序运行期间都存在。
定义方式
静态变量的定义方式是在类中使用 static 关键字修饰变量通常也称为类变量。
以下实例中我们定义一个静态变量 count 其初始值为 0
public class MyClass {public static int count 0;// 其他成员变量和方法
}
访问方式
由于静态变量是与类相关的因此可以通过类名来访问静态变量也可以通过实例名来访问静态变量。
MyClass.count 10; // 通过类名访问
MyClass obj new MyClass();
obj.count 20; // 通过实例名访问
生命周期
静态变量的生命周期与程序的生命周期一样长即它们在类加载时被创建在整个程序运行期间都存在直到程序结束才会被销毁。因此静态变量可以用来存储整个程序都需要使用的数据如配置信息、全局变量等。
初始化时机
静态变量在类加载时被初始化其初始化顺序与定义顺序有关。
如果一个静态变量依赖于另一个静态变量那么它必须在后面定义。
public class MyClass {public static int count1 0;public static int count2 count1 1;// 其他成员变量和方法
}
上面的例子中count1 要先于 count2 初始化否则编译时会报错。
常量和静态变量的区别
常量也是与类相关的但它是用 final 关键字修饰的变量一旦被赋值就不能再修改。与静态变量不同的是常量在编译时就已经确定了它的值而静态变量的值可以在运行时改变。另外常量通常用于存储一些固定的值如数学常数、配置信息等而静态变量通常用于存储可变的数据如计数器、全局状态等。
总之静态变量是与类相关的变量具有唯一性和共享性可以用于存储整个程序都需要使用的数据但需要注意初始化时机和与常量的区别。
静态变量的访问修饰符
静态变量的访问修饰符可以是 public、protected、private 或者默认的访问修饰符即不写访问修饰符。
需要注意的是静态变量的访问权限与实例变量不同因为静态变量是与类相关的不依赖于任何实例。
静态变量的线程安全性
Java 中的静态变量是属于类的而不是对象的实例。因此当多个线程同时访问一个包含静态变量的类时需要考虑其线程安全性。
静态变量在内存中只有一份拷贝被所有实例共享。因此如果一个线程修改了静态变量的值那么其他线程在访问该静态变量时也会看到修改后的值。这可能会导致并发访问的问题因为多个线程可能同时修改静态变量导致不确定的结果或数据一致性问题。
为了确保静态变量的线程安全性需要采取适当的同步措施如同步机制、原子类或 volatile 关键字以便在多线程环境中正确地读取和修改静态变量的值。
静态变量的命名规范
静态变量的命名规范与实例变量相同一般采用驼峰命名法并且要用 static 关键字明确标识。例如
public class MyClass {public static int MAX_COUNT 100;// 其他成员变量和方法
}
静态变量的使用场景
静态变量通常用于以下场景
存储全局状态或配置信息计数器或统计信息缓存数据或共享资源工具类的常量或方法单例模式中的实例变量
以下实例定义了一个 AppConfig 类其中包含了三个静态变量 APP_NAME、APP_VERSION 和 DATABASE_URL用于存储应用程序的名称、版本和数据库连接URL。这些变量都被声明为 final表示它们是不可修改的常量。
在 main() 方法中我们打印出了这些静态变量的值。
public class AppConfig {public static final String APP_NAME MyApp;public static final String APP_VERSION 1.0.0;public static final String DATABASE_URL jdbc:mysql://localhost:3306/mydb;public static void main(String[] args) {System.out.println(Application name: AppConfig.APP_NAME);System.out.println(Application version: AppConfig.APP_VERSION);System.out.println(Database URL: AppConfig.DATABASE_URL);}
}
Application name: MyApp
Application version: 1.0.0
Database URL: jdbc:mysql://localhost:3306/mydb可以看到这些静态变量存储的全局配置信息可以在整个程序中使用并且不会被修改。这个例子展示了静态变量的另一个常见应用通过它我们可以很方便地存储全局配置信息或者实现其他需要全局共享的数据。
以下实例定义了一个 Counter 类其中包含了一个静态变量 count用于记录创建了多少个 Counter 对象。
每当创建一个新的对象时构造方法会将计数器加一。静态方法 getCount() 用于获取当前计数器的值。
在 main() 方法中我们创建了三个 Counter 对象并打印出了计数器的值。
public class Counter {private static int count 0;public Counter() {count;}public static int getCount() {return count;}public static void main(String[] args) {Counter c1 new Counter();Counter c2 new Counter();Counter c3 new Counter();System.out.println(目前为止创建的对象数: Counter.getCount());}
}目前为止创建的对象数: 3