Error:java: 无法从静态上下文中引用非静态 变量 this

本文深入解析Java中静态(static)与非静态成员的区别,重点阐述了静态上下文无法引用非静态变量的常见错误及其原因。通过具体代码示例,说明了在静态方法中直接使用非静态变量会引发编译错误,并解释了实例变量与静态变量的调用规则。

Error:java: 无法从静态上下文中引用非静态 变量 this

分析:

出现这种错误首先先分清什么是静态什么是非静态,它们之间的关系是什么?

静态方法中不能引用非静态变量
非静态方法中能引用静态变量

错误原因代码如下:

public class Demo {
   public static void main(String[] args) {
        Person person = new Person(); //定义一个Person类
    }
    /*把Person类放在Demo里面
    报错  Error:java: 无法从静态上下文中引用非静态
    变量 this
    如果把Person类放在Demo外面可以正常运行*/
    class Person {
        private String name;
        private int age;
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
            System.out.println(name + age);
        }
    }
}

总结:
在java中,没有static的变量或函数,如果想被调用的话,是要先新建一个对象才可以,非静态方法和变量只有在有实例化对象时才存在的。

E:\Exec01\Web1\src\main\java\com\example\controller\ResetPasswordServlet.java:33:13 java: 从发行版 10 开始,'var' 是受限类型名称,不能用于类型声明,也不能用作数组的元素类型 E:\Exec01\Web1\src\main\java\com\example\controller\ResetPasswordServlet.java:33:9 java: 找不到符号 符号: 类 var 位置: 类 com.example.controller.ResetPasswordServletE:\Exec01\Web1\src\main\java\com\example\service\EmailService.java:4:27 java: 程序包javax.mail.internet不存在 E:\Exec01\Web1\src\main\java\com\example\service\EmailService.java:5:27 java: 程序包javax.mail.internet不存在 E:\Exec01\Web1\src\main\java\com\example\service\EmailService.java:3 java: 程序包javax.mail不存在 E:\Exec01\Web1\src\main\java\com\example\service\EmailService.java:42:9 java: 找不到符号 符号: 类 Session 位置: 类 com.example.service.EmailService E:\Exec01\Web1\src\main\java\com\example\service\EmailService.java:42:58 java: 找不到符号 符号: 类 Authenticator 位置: 类 com.example.service.EmailService E:\Exec01\Web1\src\main\java\com\example\service\EmailService.java:44:23 java: 找不到符号 符号: 类 PasswordAuthentication E:\Exec01\Web1\src\main\java\com\example\service\EmailService.java:43:13 java: 方法不会覆盖或实现超类型的方法 E:\Exec01\Web1\src\main\java\com\example\service\EmailService.java:45:28 java: 找不到符号 符号: 类 PasswordAuthentication E:\Exec01\Web1\src\main\java\com\example\service\EmailService.java:42:27 java: 找不到符号 符号: 变量 Session 位置: 类 com.example.service.EmailService E:\Exec01\Web1\src\main\java\com\example\service\EmailService.java:51:13 java: 找不到符号 符号: 类 Message 位置: 类 com.example.service.EmailService E:\Exec01\Web1\src\main\java\com\example\service\EmailService.java:51:35 java: 找不到符号 符号: 类 MimeMessage 位置: 类 com.example.service.EmailService E:\Exec01\Web1\src\main\java\com\example\service\EmailService.java:52:33 java: 找不到符号 符号: 类 InternetAddress 位置: 类 com.example.service.EmailService E:\Exec01\Web1\src\main\java\com\example\service\EmailService.java:53:41 java: 程序包Message不存在 E:\Exec01\Web1\src\main\java\com\example\service\EmailService.java:53:64 java: 找不到符号 符号: 类 InternetAddress 位置: 类 com.example.service.EmailService E:\Exec01\Web1\src\main\java\com\example\service\EmailService.java:62:13 java: 找不到符号 符号: 变量 Transport 位置: 类 com.example.service.EmailService E:\Exec01\Web1\src\main\java\com\example\service\EmailService.java:67:18 java: 找不到符号 符号: 类 AuthenticationFailedException 位置: 类 com.example.service.EmailServiceE:\Exec01\Web1\src\main\java\com\example\dao\UserDAO.java:9:32 java: 找不到符号 符号: 变量 DBUtil 位置: 类 com.example.dao.UserDAO E:\Exec01\Web1\src\main\java\com\example\dao\UserDAO.java:23:32 java: 找不到符号 符号: 变量 DBUtil 位置: 类 com.example.dao.UserDAO E:\Exec01\Web1\src\main\java\com\example\dao\UserDAO.java:43:32 java: 找不到符号 符号: 变量 DBUtil 位置: 类 com.example.dao.UserDAO E:\Exec01\Web1\src\main\java\com\example\dao\UserDAO.java:56:32 java: 找不到符号 符号: 变量 DBUtil 位置: 类 com.example.dao.UserDAOE:\Exec01\Web1\src\main\java\com\example\util\DBUtil.java:20:13 java: 无法静态上下文引用静态 变量 this E:\Exec01\Web1\src\main\java\com\example\util\DBUtil.java:21:13 java: 无法静态上下文引用静态 变量 this
最新发布
10-29
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值