日期:2014-05-20  浏览次数:20599 次

this的作用
public class eq13 {
public static void main(String args[]) {
A a=new A();
a.student.start();
a.teacher.start();
}
}
class A implements Runnable {
Thread teacher,student;
A(){
teacher=new Thread(this);//这个this作用是什么??还有我将它换成teacher为什么不行啊???
student=new Thread(this);
teacher.setName("王教授");
student.setName("学生");
}
public void run() {
...地下不再写啦

------解决方案--------------------
当前类的一个实例 。
------解决方案--------------------
Java 中的 this 是不可变对象,因此相对于 JavaScript 中的 this 不知道简单到哪里去了,JavaScript 要能整明白那个 this 的话,可以说是进入了 JavaScript 中高级阶层了。

举了一个涵盖 this 所有用法的示例:

Java code
public class TestThis {

    public static void main(String[] args) {

        JavaThis jt = new JavaThis("javathis");

        // 由于 Student 属于 JavaThis 的内部类,因此要生成 Student
        // 对象时需要在外部类对象的基础上进行 new
        JavaThis.Student st = jt.new Student("student");

        st.show("hello");
    }
}

class JavaThis {

    private String name;
    private int age;

    public JavaThis(String name) {
        // 构造参数名与这个类的成员变量名相同,因此在赋值需要使用 this.name = name; 表示将
        // 参数中的 name 值赋给 JavaThis 对象的 name 成员变量中去
        // 如果不用这个 this. 就成了 name = name; 这样很明显就是不对的了
        this.name = name;
    }

    public JavaThis(String name, int a) {
        // 使用 this 函数?
        // 这里指的是调用 JavaThis 这个类中带有 String 一个参数的构造方法,也就是先调用上面
        // 那个构造
        this(name);

        // 这里由于参数名不叫 age,因此这里可以直接使用 age = a; 当然了也可以写成 this.age = a;
        age = a;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void show() {
        System.out.println("javathis name: " + name);
    }

    public class Student {

        private String name;

        public Student(String name) {
            this.name = name;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public void show(String name) {

            // 由于方法参数中有个 name,因此这里调用 name 是方法参数中的
            System.out.println("my name: " + name);

            // 同上,由于方法参数中有个 name,要调用自己类中的成员变量 name 时需要使用
            // this.name,如果方法参数中名字不叫 name,那么这里使用 name 或者 this.name
            // 都是同样的效果
            System.out.println("my name: " + this.name);

            // 由于 Student 不是静态的内部类,而且外部类中的 name 与这个类中的 name
            // 名字一样,因此要引用外部类中的 name 时需要使用:<外部类名>.this.<外部类成员变量名>
            // 如果直接写 this.name 的话,那表示是自己的 name
            System.out.println("out name: " + JavaThis.this.name);

            // 同理,由于这里想调用外部类中的 show 方法,如果直接调用或者用 this.show() 的话,
            // 会被认为是调用自己的 show 方法,因此需要使用:<外部类名>.this.<外部类方法>
            // 下面这个调用等价于:
            // JavaThis outer = JavaThis.this;
            // outer.show();
            JavaThis.this.show();
        }
    }
}

------解决方案--------------------
参照Thread的带接口Runnable的构造方法 然后理解多态(父类引用指向子类对象)

------解决方案--------------------
java中的this确实比javascript中的this简单多了。。
------解决方案--------------------
探讨

Java 中的 this 是不可变对象,因此相对于 JavaScript 中的 this 不知道简单到哪里去了,JavaScript 要能整明白那个 this 的话,可以说是进入了 JavaScript 中高级阶层了。

举了一个涵盖 this 所有用法的示例:

Java code
public class TestThis {

public static void mai……