类内部调用该类里的方法使用this关键字对吧,但是.

直接上代码:

 public class GetNameThreadDemo extends Thread
{
    public static void main(String[] args) 
    {
        GetNameThreadDemo t=new GetNameThreadDemo();
        t.start();
        for(int i=0;i<10;i++)
        {
            t.printMsg();
        }
    }
    public void run()
    {
        for(int i=0;i<10;i++)
            printMsg();
    }
    //取得当前线程的引用,赋给Thread对象t
    public void printMsg()
    {
        Thread t=Thread.currentThread();
        String name=t.getName();
        System.out.println("name="+name);
    }
}  

这段代码可以正常运行,但是一开始使用this来调用方法报错:
图片说明

我想知道为啥在类内部调用方法还用实例化对象的方式.不是直接用this吗?

不会是写在main里面吧
this只有实例化以后才有意义,没有实例化this没有指向。
main是静态方法,静态方法中调用必须是静态方法或者实例.方法的方式

把调用的方法改成静态的试试?

因为这个GetNameThreadDemo类不是一个static类 而这个main方法是一个static方法,在一个静态方法中是不能调用一个静态变量的。
package com.king.test;

public class ThreadTest {
public static void main(String[] args) {
// 继承Thread创建一个线程
// Cat cat = new Cat();
// cat.start();

    // cat.start();
    // 这是错的,线程对象不能启动两次

    // 实现Runnable接口创建一个线程
    Dog dog = new Dog();
    Thread t1 = new Thread(dog);
    Thread t2 = new Thread(dog);
    Thread t3 = new Thread(dog);

    t1.start();
    t2.start();
    t3.start();
}

}

class Cat extends Thread {

private int times = 0;

// 重写run函数
public void run() {
    while (times < 10) {
        // 休眠一秒
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // 显示当前线程的名字
        System.out.println(Thread.currentThread().getName() + " hello cat "
                + times);
        times++;
    }
}

}

class Dog implements Runnable {
private int times = 0;

public void run() {
    while (true) {
        // 休眠一秒
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // 线程同步(同步代码块)
        synchronized (this) {
            // 显示当前线程的名字
            System.out.println(Thread.currentThread().getName()
                    + " hello dog " + times);
            times++;
        }
    }
}

}


静态方法不能使用this,也不能访问非静态成员。
如果要访问,去掉static

别把main方法当成是你这个类的方法看。

this只有在非静态方法中才能使用,指的是当前对象本身。

请理解this这个词语的意思。。在java中this只代表当前的类
class A{
this表示a
class B{
this表示b
}
}