java non-static variable this cannot be referenced from a static context

*/public class TaskThreadDemo { //为什么这个新建的CLASS不能被包含在taskThreadDemo里面 public static void main(String[] args){ Runnable printa=new PrintChar(✀a✀,1000); PrintChar printb=new PrintChar(✀b✀,1000); Thread thread1=new Thread(printa); Thread thread2=new Thread(printb); thread1.start(); thread2.start(); } class PrintChar implements Runnable { private int times; private char c; public PrintChar(char c1,int times1){ c=c1; times=times1; }public void run(){ for(int i=0;i<times;i++) { System.out.print(c); } } }} 为什么 printchar 这个类不能包含在 TaskThreadDemo 里面,
2026年09月25日 18:49
有3个网友回答
网友(1):

可以的。类可以有内部类,具体问题。具体再追问。
错误提示是说:
非静态变量类型不能在静态上下文中引用。
(1)你的;main方法是static的,即静态的。
(2)如果你将类包含在里面的话,需要将printchar声明为静态的。才能在main方法中引用。

网友(2):

首先楼上说的有歧义,如果在static方法中new 一个对象都不行的话,那平时在main方法中是如何new的?

(1)上面的问题主要是因为成员内部类。构造一个成员内部类对象时应使用

new TaskThreadDemo().new PrintChar();

(2)可以使用静态内部类,加上static关键字,静态内部类的创建不需要依赖外部类

new PrinctChar();

网友(3):

static修饰属于类但不属于对象的变量和方法。
静态方法只能访问静态成员,实例方法可以访问静态和实例成员。
之所以不允许静态方法访问实例成员变量,是因为实例成员变量是属于某个对象的,而静态方法在执行时,并不一定存在对象