变量、方法以及静态和非静态

变量
变量的种类:
    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);
    }
}

时间: 2024-08-02 11:00:47

变量、方法以及静态和非静态的相关文章

final,static静态和非静态,初始化和代码块的区别、父类和子类中都有static变量时的初始化顺序、重写equals()、 instanceof强制转换

final:类不能被继承,方法不能被重写,属性值不能被修改(常量): 可以调用: static静态常量----- 不需要创建对象,可以直接调用类里面的属性,方法: 示例如下: 加了static说明它是属于整个类的,每个对象值都一样,如下图所示:size是静态的,所以当在下面t1对象中改变size的值时,整个类中的size值都变了:然后作为普通属性的length,当在t1对象中改变其值,并不会改变原始值: 静态方法不能调用非静态的方法和非静态的属性,也不能打印非静态的方法和非静态的属性:可以在静态

Java中static静态与非静态的区别

先前看到一个技术大牛写了一个关于静态成员与非静态成员,静态方法和非静态方法的各自区别,觉得挺好的,在这里写一个小程序来说明这些区别. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 package com.liaojianya.chapter5; /**  * This program will de

20151024_001_C#基础知识(静态与非静态的区别,值类型和引用类型,堆和栈的区别,字符串的不可变性,命名空间)

1:我们把这些具有相同属性和相同方法的对象进行进一步的封装,抽象出来类这个概念. 类就是个模子,确定了对象应该具有的属性和方法. 对象是根据类创建出来的. 2:类:语法 [public] class 类名 { 字段; 属性; 方法; } 写好了一个类之后,我们需要创建这个类的对象,那么,我们管创建这个类的对象过程称之为类的实例化.使用关键字new 实例化类===创建类 this:表示当前这个类的对象. 类是不占内存的,而对象是占用内存的. 结构是面向过程的,类是面向对象的,之前没有面向对象的时候

关于静态与非静态之具体总结

花费了些功夫,差点儿相同搞明确了: 大家会看到有些地方不停反复出现--那就是你要找的东西 本文參考多处,详细出处就不写了. 静态和非静态: 字段.函数成员的声明中含static修饰符时是静态成员,否则是非静态成员(实例成员): 数据成员能够分静态变量.非静态变量两种. 静态成员属于类,而非静态成员(实例成员)属于对象. 对于类的数据成员来说.假设是静态的,那么他将是类的一部分,为全部实例共享,假设是非静态的.则每一个实例有一份考贝. 类的非静态成员属于类的实例全部,每创建一个类的实例都在内存中为

关于静态与非静态之详细总结

花费了些功夫,差不多搞明白了: 大家会看到有些地方不停重复出现--那就是你要找的东西 本文参考多处,具体出处就不写了. 静态和非静态: 字段.函数成员的声明中含static修饰符时是静态成员,否则是非静态成员(实例成员): 数据成员可以分静态变量.非静态变量两种. 静态成员属于类,而非静态成员(实例成员)属于对象.对于类的数据成员来说,如果是静态的,那么他将是类的一部分,为所有实例共享,如果是非静态的,则每个实例有一份考贝. 类的非静态成员属于类的实例所有,每创建一个类的实例都在内存中为非静态成

static的应用以及静态与非静态的区别

先前看到一个技术大牛写了一个关于静态成员与非静态成员,静态方法和非静态方法的各自区别,觉得挺好的,在这里写一个小程序来说明这些区别. package com.ljy.chapter5; /** * This program will demonstrate the use of static method. * @author LIAO JIANYA * */ public class StaticTest { public static void main(String[] args) { S

《静态与非静态之间的调用问题》

1 //静态与非静态之间的调用问题. 2 public class StaticDemo 3 { 4 /* 5 此处演示了,静态的方法(此处是main方法)不能直接调用非静态的方法,可以通过创建该类对象来调用 6 public void info() 7 { 8 System.out.println("简单的info方法!"); 9 } 10 public static void main(String[] args) 11 { 12 StaticDemo s = new Static

C# 关于静态与非静态的那点小事

所谓静态与非静态,无非就是在声明的时候多用了一个"static". 那么静态与非静态有什么区别呢? 1.对于非静态的成员,包括方法,字段,属性.调用的时候需要用实例化的对象来调用.(new出来的.) 而对于静态成员,调用的时候则需要使用类名去调用. 这就引申出一个问题,可不可以用静态类来实例化对象呢?答案当然是否定的,因为,实例化对象的目的,就是要用实例化的对象来调用属性,方法或字段.对于静态的类来说,      是用类名来调用的,所以对于静态类来说,完全不需要实例化一个对象.也就无法

03.静态和非静态的区别

静态和非静态的区别 方法,字段,属性都可以被static修饰. (1).在非静态类中,即可有实例(非静态)成员,可以有静态成员. 静态成员和非静态成员在调用上有什么不一样呢? (1.1)非静态成员(实例成员)必须被实例化对象之后,的对象名来调用. 对象名.实例成员名; (1.2)静态成员必须被定义它的类的类名来调用. 类名.静态成员名;      //注意,如果要在定义静态方法的类的内部使用静态 方法,我们可以省略类名.直接写. (1.3).静态方法可以访问静态成员,但是静态方法不可以访问非静态