一、Static关键字
1、特点
(1)作为共享变量被所在类中的所有对象所共享,且在外部类中创建的所在类对象也可共享Static变量。
(2)在外部类中Static变量可通过类名进行调用。
(3)Static变量优先于对象存在,即在外部类中可以创建Static变量而后创建对象
(4)Static变量随着类的加载而加载,即当类的字节码文件进入方法区的同时,Static修饰的变量就被存放到堆内存中。
(5)Static修饰的成员变量、成员方法相互可直接访问(因为Static修饰的成员变量、成员方法优于对象创建,因为所有Static成员随着类加载而加载,而非Static成员需要创建对象才可调用,故非Static成员与Static成员间相互不可直接访问,Static成员可直接访问)
下面让我们来看看代码示例:
/**
* @author Tweek
*/
public class Student {
// 学生类
String name;
int age;
static String school;
}
public class StaticTest1 {
/**
static 关键字:修饰符,可以修饰成员变量,成员方法
特点:
1、被类的所有对象所共享
2、多了一种调用方式,可以通过类名进行调用(推荐使用类名进行调用)
3、随着类的加载而加载,优于对象存在
*/
public static void main(String[] args) {
//随着类的加载而加载,可以放于创建对象代码之上
Student.school="NENU";
Student stu = new Student();
stu.name="Zhangsan";
stu.age=15;
System.out.println(stu.name+"---"+stu.age+"---"+Student.school);
System.out.println("-------------------------------------------");
Student stu1 = new Student();
stu1.name="Tweek";
stu1.age=21;
System.out.println(stu1.name+"---"+stu1.age+"---"+Student.school);
}
}
控制台输出:
Zhangsan---15---NENU
-------------------------------------------
Tweek---21---NENU
2、Static修饰成员方法
工具类
(1)当前类中所有的成员方法被Static修饰且私有构造方法,则称此类为工具类。
(2)工具类方便外部类调用所需的函数方法,可直接通过类名调用,无需在外部类中创建对象
下面让我们来看看代码示例:
/**
* @author Tweek
*/
public class ArrayTools {
/**
* 1、从数组中找最大值
* 2、从数组中找最小值
* 3、打印所有元素,格式要求[1,2,3]
*/
//工具类
private ArrayTools(){
}
public static int getMax(int[] a){
int max =a[0];
for (int i = 1; i <a.length ; i++) {
if(max<a[i]){
max=a[i];
}
}
return max;
}
public static int getMin(int[] a){
int min =a[0];
for (int i = 1; i <a.length ; i++) {
if(min>a[i]){
min=a[i];
}
}
return min;
}
public static void printArray(int[] a){
System.out.print("[");
for (int i = 0; i < a.length; i++) {
if(i<a.length-1){
System.out.print(a[i]+",");
}
else{
System.out.print(a[i]+"]");
}
}
}
}
//测试类
public class ArrayTest2 {
public static void main(String[] args) {
/*
无需创建对象,直接用类名调用
*/
int[] arr = {2,3,2,1,5};
System.out.println("MAX:"+ArrayTools.getMax(arr)+" MIN:"+ArrayTools.getMin(arr));
ArrayTools.printArray(arr);
}
}
控制台输出:
MAX:5 MIN:1
[2,3,2,1,5]
二、Main方法详解
具体分析
1、public:访问最大权限,被JVM调用
2、static:不能创建对象,被JVM调用
3、void:不需要给JVM返回值,被JVM调用
4、main:通用名称,非关键字,被JVM识别
5、String[] args: 以前用于接受键盘录入,现在因为有了Scanner类,所有没用了
代码示例:
/**
* @author Tweek
*/
public class ArrayTest2 {
public static void main(String[] args) {
int[] arr = {2,3,2,1,5};
System.out.println("MAX:"+ArrayTools.getMax(arr)+" MIN:"+ArrayTools.getMin(arr));
ArrayTools.printArray(arr);
}
}