首页 > 代码库 > this与static
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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。