zoukankan      html  css  js  c++  java
  • this与static

    this关键字:

        我们经常用对象来调用方法,但是一个类如果有多个对象,那么机器怎么知道是哪个对象调用的?你可能会说你是这样写的

    a.b();

    a对象调用了b方法,很明显是a对象调用的,但是机器怎么知道,很显然按编程者的思维的话需要把a对象传过去,这样就可以了。但是我们从来没有去这样做,这是因为编译器替我们完成了。但是,其实有一个必须在方法内部使用的关键字this,他表示调用方法的那个对象的引用,this最常用的可能就是和构造器一起使用了,一种是赋值时,一种是在构造器中使用构造器,可以防止代码重复,下面是示例代码:

    class B{
        int d;
        String str;
        B(int d){
            this.d=d;
        /*这里不用this,你要怎么办?我就只有d不可以重名了。
         * 可能你会想传入一个对象的引用,但是在在构造方法之前根本就没有对象的引用
         * 传入一个对象的引用在一个普通的方法中还可以去实现,但是每次都传就很费事*/
        }
        B(String str,int d){
            this(d);//这里你主动去调用第一个只有一个参数的构造器,省去了代码this.d =d
            this.str=str;
        }
    }

    static关键字:

      我们创建类,其实就是在描述一个事物的属性,这时并没有给我们分配内存,当我们实例化这个类得到对象时才分配了内存,这里的方法才可以被外界调用。但是,如果我们想创造一个方法,它不和任何的类的对象关联,也就是说这个方法在没有对象时我就可以使用。这时候static就可以满足我们。

    静态的数据和方法可以就是“类数据”和“类方法”,他不会因为某个对象的存在而存在,因为某个对象的消失而消失,下面是一个程序:

    public class Test{
        static int b;
        public static void main(String[] args) {
            a();/*静态方法,所以直接调用了,如果是非静态,就要Test test = new Test(); test.a()*/
            Test test1 = new Test();
            test1.b =2;
            System.out.println("Test1---->"+test1.b);
            Test test2 = new Test();
            test2.b=3;
            System.out.println("Test2---->"+test2.b);
            System.out.println("Test1---->"+test1.b);
        }
        public static void a(){
            System.out.println("静态方法");
        }
        
    }/*OUTPUT 
    静态方法
    Test1---->2
    Test2---->3
    Test1---->3
    */

    输出结果test1也变为了3,说明无论你实例化的对象是什么,静态的数据永远信奉我就是我的至理名言;

    在静态方法中,不可以使用非静态数据和方法,因为静态方法可以在没对象的时候就使用,而非静态的数据和方法必定与对象绑定在一起,所以在没对象时怎么能做有对象时的事呢?但是也不是没有解决办法,没有对象可以实例化一个呀,这就解决了问题啊。代码就是这样

    public class Test{
        public static void main(String[] args) {//主函数是静态的奥
            Test test = new Test();
            test.a();//有对象了就可以调用了 
        }
        public  void a(){
            System.out.println("非静态方法");
        }
    }

    由于this代表一个对象的引用,static又是无对象主义者,所以两者不共戴天,在static方法中决不能使用this

    原文地址:http://www.cnblogs.com/969059506-java/p/3722419.html

  • 相关阅读:
    洛谷 P4861 按钮
    《情人》
    bzoj1019: [SHOI2008]汉诺塔(dp)
    hdu5698瞬间移动(组合数,逆元)
    poj Code(组合数)
    组合数 牛顿二项式定理 杨辉三角
    8.22 NOIP 模拟题
    codevs2495 水叮当的舞步(IDA*)
    codevs 2541 幂运算(迭代加深搜索)
    较复杂搜索,剪枝
  • 原文地址:https://www.cnblogs.com/969059506-java/p/3723827.html
Copyright © 2011-2022 走看看