变量方法以及静态和非静态
Posted Dev_Nick
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了变量方法以及静态和非静态相关的知识,希望对你有一定的参考价值。
变量
变量的种类:
1、成员变量
2、局部变量
成员变量与局部变量的区别:
定义位置的区别
1、成员变量定义在方法之外,类之内。
2.局部变量定义在方法之内。
作用的区别:
1、成员变量用于描述事物的公共属性。
2、局部变量提供一个一个变量给方法内部使用。
生命周期的区别:
1、成员变量随着对象的创建而存在,对着对象的消失而消失。
2、局部变量在调用了对应的方法时执行到了创建该变量的语句时存在,一旦出了自己的作用域会马上从内存中消失。
初始值得区别:
1、成员变量有默认初始值:
数据类型 默认初始值
int 0
float 0.0f
double 0.0
boolean false
char ‘‘(空字符)
String null
2、局部变量没有默认值,必须先初始化在使用。
方法:函数也被称为方法。
静态- static修饰符
static 修饰成员变量(静态成员变量)
使用场景:如果有数据需要被共享给所有对象使用时,那么就可以使用static修饰。例如统计一个类被使用了几次。
静态成员变量的访问方式:
1、可以通过对象进行访问
格式:对象.变量名
2、可以使用类名进行访问
格式:类名.变量名
注意事项:
1、非静态成员变量只能使用对象访问,不能使用类名访问。
2、千万不要为了方便访问数据而使用static修饰成员变量。只有成员变量数据真正需要被共享的时候才使用static修饰。
static 修饰方法(静态成员方法)
使用场景:如果一个函数没有直接访问到非静态的成员时,那么就可以使用static修饰了,一般用于工具类型的方法。----静态函数只要存在对象,也可以访问非静态数据,只要不能直接访问而已。
静态成员函数的访问方式:
1、可以通过对象进行访问
格式:对象.静态函数名(形参列表);
2、可以使用类名进行访问
格式:类名.静态函数名(形参列表);
注意事项:
1、 静态函数是可以调用类名或者对象进行调用的,而非静态函数只能使用对象进行调用。
2、静态的函数可以直接访问静态的成员,但是不能直接访问非静态的成员。
原因:静态函数是可以使用类名直接调用的,这时候可能还没有存在对象,
而非静态的成员数据是随着对象的存在而存在的。
3、非静态的函数是可以直接访问静态与非静态的成员。
原因:非静态函数只能由对象调用,当对象存在的时候,静态数据老早就已经存在了,而非静态
数据也随着对象的创建而存在了。
4、静态函数不能出现this或者super关键字。
原因:因为静态的函数是可以使用类名调用的,一旦使用类名调用这时候不存在对象,而this
关键字是代表了一个函数的调用者对象,这时候产生了冲突。
静态的数据的生命周期:静态的成员变量数据是优先于对象存在的。
***推荐使用类名访问静态的成员
静态的成员变量与非静态的成员变量的区别:
1. 作用上的区别:
1. 静态的成员变量的作用共享一个数据给所有的对象使用。
2. 非静态的成员变量的作用是描述一类事物的公共属性。
2. 数量与存储位置上的区别:
1. 静态成员变量是存储方法区内存中,而且只会存在一份数据。
2. 非静态的成员变量是存储在堆内存中,有n个对象就有n份数据。
3. 生命周期的区别:
1. 静态的成员变量数据是随着类的加载而存在,随着类文件的消失而消失。
2.非静态的成员数据是随着对象的创建而存在,随着对象被垃圾回收器回收而消失。
代码示例如下:
//数组工具类
class ArrayTool{
static int count = 0; //统计使用的次数
{
count++;
}
public static void showCount(){
System.out.println("创建了"+count+"个对象");
}
//转化为字符串并以","分割
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;
}
}
}
}
}
class Demo{
public static void main(String[] args){
ArrayTool at1 = new ArrayTool();
ArrayTool at2 = new ArrayTool();
ArrayTool at3 = new ArrayTool();
ArrayTool at4 = new ArrayTool();
ArrayTool.showCount();
int[] arr = {12,1,456,165};
ArrayTool.sort(arr);
String info = ArrayTool.toString(arr);
System.out.println("数组的元素:"+ info);
}
}
以上是关于变量方法以及静态和非静态的主要内容,如果未能解决你的问题,请参考以下文章