转自: Android应用开发中关于this.context=context的理解
在Android应用开发中,有的类里面需要声明一个Context的成员变量,然后还需要在该类的构造函数中加上this.context=context;这行代码。为什么要这么写呢?
先看下面这个例子,这是我在百度空间看到的:
Button button=new Button(this); 1
括号里的this当然就是本质上Context,其指向的就是当前的Activity,原因形象点说就是Button为了能相应各种操作,记得让Android系统知道自己是属于哪个Activity,这个信息是必须的,因为只有这样Android才会对其进行管理,比如相应onClick()事件,否则Android连这个Button属于哪个Activity都不知道,怎么响应?
this的用法:this.name=name 这个是什么意思?
public Employee(string name, string alias) { // Use this to qualify the fields, name and alias: this.name = name; this.alias = alias; } 123456789
这是的一个Employee类的构造函数(一个类的构造函数和它这个类本身同名,便于编译器识别构造函数。在实例化一个类的时候,会执行构造函数里面的代码),this.name指当前类的属性,后一个name是构造函数中的参数 这就是给类中的属性赋值 。
这样写就清楚了
public Employee(string strName, string strAlias) { // Use this to qualify the fields, name and alias: this.name = strName; this.alias = strAlias; } 123456789
this就是当前类的实例对象,在这就是MainActivity,getApplicationContext获取的是Application对象,他们都是Context的子类,后者是全局上下文,生命周期是整个程序运行期间,并且是单例的。
其中Application是可以自定义的,一般用来存全局变量,实现Application的子类,在配置文件中声明,需要使用的时候getApplicationContext()强转成你自定义的类。
java中this作为参数
this是指当前对象自己。public class Hello { String s = "Hello"; public Hello(String s) { System.out.println("s = " + s); System.out.println("1 -> this.s = " + this.s); this.s = s; System.out.println("2 -> this.s = " + this.s); } public static void main(String[] args) { Hello x = new Hello("HelloWorld!"); } } 12345678910111213
运行结果:
s = HelloWorld!
1 -> this.s = Hello
2 -> this.s = HelloWorld!
public class AccpTercher1 { private String name; // 教员 private int age;// 年龄 private String education;//学历 private String position;//职位 public AccpTercher1(String name,int age,String education,String position){ this.name=name; this.age=age; this.education=education; this.position=position; }
1234567891011121314151617181920212223this.name指当前类的属性,后一个name是构造函数中的参数 这就是给类中的属性赋值
在这个例子中,构造函数Hello中,参数s与类Hello的变量s同名,这时如果直接对s进行操作则是对参数s进行操作。若要对类Hello的成员变量s进行操作就应该用this进行引用。运行结果的第一行就是直接对构造函数中传递过来的参数s进行打印结果; 第二行是对成员变量s的打印;第三行是先对成员变量s赋传过来的参数s值后再打印,所以结果是HelloWorld!
public class A { public A() { new B(this).print(); } public void print() { System.out.println("Hello from A!"); } } public class B { A a; public B(A a) { this.a = a; } public void print() { a.print(); System.out.println("Hello from B!"); } }
12345678910111213141516171819运行结果:
Hello from A!
Hello from B!
在这个例子中,对象A的构造函数中,用new B(this)把对象A自己作为参数传递给了对象B的构造函数。
当然,如果本类中调用其他类的方法,该方法可以把这个类传过去,比如:
public class Dog{ public String name; public Dog(String name){ this.name = name; } } Man man = new Man(); man.parseDog(this); 123456789101112131415
关于构造函数:
Java中一个类 必须包含一个或一个以上的构造方法,如果没有为这个类写构造方法(构造函数),则系统为该类提供一个默认且没有参数的构造方法。当然了,如果咱们已经为一个类写了构造方法,系统将不再为该类提供构造方法。
构造方法用于构造该类的实例对象,Java语言通过new关键字来调用构造方法,从而返回该类的实例。
构造方法是一个类创建对象的根本途径,如果一个类没有构造方法,这个类通常无法创建实例。
比如下面的CallAction类构造了带有3个参数的的CallAction方法,其他类才能new一个CallAction类的对象,并且传参。
public class CallAction { private String mPerson = null; private String number = null; private MainActivity mActivity; public CallAction(String person, String code, MainActivity activity) { mPerson = person; number = code; mActivity = activity; } 1234567891011
比如在MainActivity类写一个call方法,需要调用该类的构造方法:
private void call(){ CallAction callAction=new CallAction(person,number,MainActivity.this); } 123
当然构造方法还有以下写法:
因为构造函数里面构造的参数与上面的实例对象名字完全一致,所以用this.XXX表示当前类的属性,后一个XXX是构造函数中的参数 这就是给类中的属性赋值
public class OpenAppAction { MainActivity mActivity; String appName; public OpenAppAction(MainActivity mActivity, String appName) { this.mActivity = mActivity; this.appName = appName; } 123456789
相关知识
android 布局中的单位及分辨率自解
Android APP打开另一个APP完整逻辑实现
Android简单实现汉字笔顺动画——Java版
Android 移动开发
Android Studio 实战演练—小猴子摘桃
基于TensorFlow Lite实现的Android花卉识别应用
深度学习——以花朵识别为例,分析构造神经网络时用到的各个类构造函数(Dense、Conv2D、Flatten等)
Android移动应用开发之Fragment
Android移动应用开发教程①
深入理解移动应用开发:从概念到实践
网址: 【转】Android关于this.context=context以及构造函数理解 https://m.huajiangbk.com/newsview847133.html
上一篇: 关于使用Python——写最佳体 |
下一篇: PerrierJouet巴黎之花 |