static(静态)修饰符

一:static修饰成员变量:
如果有数据需要被共享给所有对象使用时,那么就可以使用static修饰

静态成员变量访问方式:
1.可以使用对象访问 对象.变量名
2.可以使用类名访问 类名.变量名

class Persons{
 String name;
 static String country="中国";
 
 public Persons(String name){
  this.name=name;
 }
}
public class Test6 {
public static void main(String[] args) {
Persons p1=new Persons("张三");
System.out.println("名字:"+p1.name+",国籍:"+p1.country);
  }
  }

静态成员变量只会在数据共享区维护一份,而非静态成员变量的数据会在每个对象中维护一份

注意:
1.非静态成员变量只能使用对象访问,不能使用类名访问
2.千万不要为了方便访问数据而使用static修饰变量,只有数据是真正需要被共享时使用

static修饰成员变量的应用场景:
如果一个数据要被所有对象共享使用时,才使用static修饰

需求:统计一个类被使用了多少次创建对象,该类对外要显示被创建的次数

class Emp{
 static int count;
 public Emp(){
  count++;
 }
 public void showCount(){
  System.out.println("创建了"+count+"次对象");
 }
}
public class Test7 {
  public static void main(String[] args) {
  Emp e1=new Emp();
  Emp e2=new Emp();
  Emp e3=new Emp();
  e3.showCount();
  }
  }

二:static修饰方法(静态的成员方法):
访问方式:
1.可以使用对象访问 对象.函数名();
2.可以使用类名访问 类名.函数名();
推荐使用类名直接访问,节约内存。

静态函数要注意的事项:
1.静态函数可以使用类名或对象名访问,非静态函数只能使用对象名访问
2.静态函数可以直接访问静态成员,但是不能直接访问非静态成员
3.非静态函数可以访问静态与非静态成员
4.静态函数不能出现this或者super关键字

静态数据的声明周期:静态的成员变量时优先于对象存在的

static什么时候修饰一个函数:
如果一个函数没有直接访问到非静态的成员时,那么就可以使用static修饰,一般用于工具类型的方法

需求:编写数组Arays.toString()和sort()的方法

class ArrayTool{
 public static String toString(int[] arr){  //遍历数组方法
  String result="";
  for(int i=0;i<arr.length;i++){
   if(i==0){
    result+="["+arr[i]+",";
   }else if(i==arr.length-1){
    result+=arr[i]+"]";
   }else{
    result+=arr[i]+",";
   }
  }
  return result;
 }
 public static void sort(int[] arr){  // 数组排序方法
  for(int i=0;i<arr.length-1;i++){
   for(int j=i+1;j<arr.length;j++){
    if(arr[i]>arr[j]){
     int temp=arr[i];
     arr[i]=arr[j];
     arr[j]=temp;
    }
   }
  }
 }
}
public class Test8 {
  public static void main(String[] args) {
   int[] arr={19,8,49,12,65};  
  ArrayTool.sort(arr);
  String info=ArrayTool.toString(arr);
  System.out.println(info);
  }
  }

静态成员变量与非静态成员变量的区别:
1.作用上的区别:
静态成员变量的作用是共享一个数据给所有对象使用
非静态成员变量的作用是描述一类事物的公共属性
2.数量与存储位置上的区别:
静态成员变量是存储在方法区内存中,而且只会存在一份数据
非静态成员变量时存储在堆内存中,有n个对象就有n份数据
3.声明周期的区别:
静态成员变量数据是随着类的加载而存在,随着文件的消失而消失
非静态的成员变量时随着对象的创建而存在,随着对象被垃圾回收器回收而消失

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值