Java中的this随处可见,用法也多,现在整理有几点:
1. 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!");
}
运行结果:
s = HelloWorld!
1 -> this.s = Hello 2 -> this.s = HelloWorld!
在这个例子中,构造函数Hello中,参数s与类Hello的变量s同名,这时如果直接对s进行操作则是对参数s进
行操作。若要对类Hello的成员变量s进行操作就应该用this进行引用。运行结果的第一行就是直接对构造函
数中传递过来的参数s进行打印结果;第二行是对成员变量s的打印;第三行是先对成员变量s赋传过来的参
数s值后再打印,所以结果是HelloWorld!
2. 把this作为参数传递
当你要把自己作为参数传递给别的对象时,也可以用this.如:
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!");
}
运行结果:
Hello from A!
Hello from B!
在这个例子中,对象A的构造函数中,用new B(this)把对象A自己作为参数传递给了对象B的构造函数。
3. 注意匿名类和内部类中的中的this.
有时候,我们会用到一些内部类和匿名类,如事件处理。当在匿 嘀杏胻his时,这个this则指的是匿名类或
内部类本身。这时如果我们要使用外部类的方法和变量的话,则应该加上外部类的类名。如下面这个例子:
public class A {
int i = 1;
public A(){
Thread thread = new Thread(){
public void run(){
for(;;){
A.this.run();
try {
sleep(1000);
} catch(InterruptedException ie){ }
}
};//注意这里有;
thread.start();
}
public void run(){
System.out.println("i = " + i);
i++;
}
public static void main(String[] args)throws Exception {
new A();
}
}
在上面这个例子中, thread 是一个匿名类对象,在它的定义中,它的 run 函数里用到了外部类的 run 函
数。这时由于函数同名,直接调用就不行了。这时有两种办法,一种就是把外部的 run 函数换一个名字,
但这种办法对于一个开发到中途的应用来说是不可取的。那么就可以用这个例子中的办法用外部类的类名加
上 this 引用来说明要调用的是外部类的方法 run.
4.在构造函数中,通过this可以调用同一class中别的构造函数,如
public class Flower{
Flower(int petals){}
Flower(String ss){}
Flower(int petals, Sting ss){
//petals++;调用另一个构造函数的语句必须在最起始的位置
this(petals);
//this(ss);会产生错误,因为在一个构造函数中只能调用一个构造函数
}
值得注意的是:
1:在构造调用另一个构造函数,调用动作必须置于最起始的位置。
2:不能在构造函数以外的任何函数内调用构造函数。
3:在一个构造函数内只能调用一个构造函数。
分享到:
相关推荐
本篇文章将深入探讨`final`关键字在Java中的使用和重要性,帮助开发者更好地理解和应用这一关键特性。 首先,`final`关键字用于声明变量。当一个变量被声明为`final`时,它的值一旦被初始化,就不能再改变。这在...
Java中的`static`关键字是Java语言中的一个重要特性,它用于定义类级别的成员,包括变量、方法、块和内部类。本文将深入解析`static`关键字的五个主要用途:静态成员变量、静态方法、静态初始化块、静态内部类以及...
在`main`方法中,创建`People`对象并调用`test()`方法给`be`的`name`属性赋值,然后在`test2()`中打印`name`,由于`be`是共享的,所以输出的是在`test()`中设置的值。 然而,如果在`test()`方法内部创建一个新的`...
Java中的`ClassName.this`是一个非常重要的关键字组合,它在编程中起到了关键的作用,尤其是在处理类的内部结构和对象引用时。下面将详细解释`this`关键字的用途以及`ClassName.this`的含义。 首先,让我们来看看`...
在实际开发中,我们还可以使用工厂方法、静态工厂方法、构造器链、单例模式等不同的方式来创建对象。每种方式都有其特定的适用场景和优缺点,开发者应根据需求选择合适的创建策略。 此外,对于性能敏感的应用,了解...
当在类的实例方法中使用 `this` 时,它指的是调用该方法的对象。例如,在 `Person` 类中,`this.name = name;` 表示将传入的 `name` 参数赋值给当前对象的 `name` 属性。这有助于区分局部变量和成员变量,尤其是在...
此外,如果需要在方法中修改成员变量的值,可以使用 `this` 关键字明确指定成员变量,如 `this.color = "白色"`。 总的来说,成员变量和局部变量的主要区别在于它们的作用域、生命周期和初始化方式。成员变量是类的...
枚举在Java中通过`enum`关键字来创建,它在很多方面类似于类,但具有更严格和固定的结构。以下是关于Java枚举类型的详细说明: 1. **枚举定义**: 当我们使用`enum`定义一个枚举类型时,实际上创建了一个继承自`...
在Java中,synchronized关键字可以用来同步代码块或方法。同步代码块的语法格式为`synchronized(对象){};`,其中对象是要锁定的对象,通常是当前对象,即`this`。同步方法的语法格式为`synchronized 返回值 方法名()...
Java中静态代码块的执行浅析 Java中的静态代码块是一种特殊的代码块,它们是在类加载过程中执行的,而不是在对象创建时执行的。静态代码块的执行是自动的,且只执行一次。在Java中,静态代码块的执行是static关键字...
上述例子中,通过在函数HelloWorld中使用this关键字,我们能够向新创建的对象实例中添加属性和方法。通过这种方式,每个HelloWorld的实例都会拥有自己的name属性和sayHello方法。 JavaScript中的对象可以通过...
- **this关键字**:在类中,`this`关键字代表当前对象实例,用于区分局部变量和成员变量。 - **继承**:子类继承父类,可以获得父类的所有非私有成员。C#支持单继承,即一个子类只有一个父类,但一个父类可以有多...
在示例中,`Person`函数就是构造函数,`this`关键字用于在实例中设置属性和方法。然而,每个`Person`实例的`showMessage`方法仍然是独立的,不是共享的。 **三、原型模式** 原型模式利用JavaScript对象的原型链...
使用`new`关键字可以创建构造函数的实例。例如: ```javascript function Person(name, age, job) { this.name = name; this.age = age; this.job = job; this.logName = function() { console.log(this.name)...
JavaScript中的立即执行函数(Immediately Invoked Function Expression,简称IIFE)是一种常见的编程技巧,用于确保函数在定义的同时立即执行,避免与其他代码产生冲突。在JavaScript中,由于其动态特性和宽松的...