Java编译器无法识别自定义类与对象,请求代码问题排查
问题排查与代码修正
我来帮你梳理下代码里的关键问题,这些就是导致编译器无法识别类和对象的原因:
1. 单个源文件的public类限制
Java规定:一个源文件中只能有一个public类,并且这个public类的名称必须和文件名完全一致(比如你的文件如果叫pk1.java,那只能保留public class pk1,另一个sd类不能加public修饰符)。
2. 对象实例化的语法错误
你创建对象的写法sd mark=new mark();完全不符合Java语法,正确的实例化格式是:
类名 对象名 = new 类名();
所以这里应该写成sd mark = new sd();——mark是你给sd类实例起的名字,后面new的必须是类名sd。
3. 错误的属性访问逻辑
你试图用sd.mark.age访问属性,这是把mark当成了sd类的静态成员,但实际上mark是你创建的实例对象,应该直接用mark.age、mark.rollnumber来访问它的属性。另外,你在sd类里定义的public static Object mark;完全多余,还会造成混淆,直接删掉就行。
修正后的完整代码
import java.util.Scanner; public class pk1 { public static void main(String[] args) { System.out.println("Enter student name"); // 正确实例化sd类的对象 sd mark = new sd(); Scanner scan = new Scanner(System.in); // 直接通过对象实例访问属性 mark.age = 15; mark.rollnumber = 14; System.out.println(mark.age); System.out.println(mark.rollnumber); } } // 去掉public修饰符,遵循单个源文件的public类限制 class sd { int age; int rollnumber; }
补充说明:如果以后想让sd类在多个文件中复用,可以把它单独放到sd.java文件里,这时就可以给它加上public修饰符了。
内容的提问来源于stack exchange,提问作者Abhilash V
相关产品推荐
相关产品推荐

