在java中,有main方法的类叫啥类,没有main方法的类叫啥类
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在java中,有main方法的类叫啥类,没有main方法的类叫啥类相关的知识,希望对你有一定的参考价值。
有main方法的类一定是用public修饰的,程序的入口就是此类的main方法,没有main方法的类修饰符没有限制,除了这个没有其他的不同点,在你这个程度上没有类的叫发的区别;应该是其他的程度上,比如说内部类,静态内部类,匿名内部类等等,他们的比较不是在有没有main上进行的 参考技术A java里面没有这个说法,而且,在很多程序里是没有main方法的,比如说applet,比如说andorid。要用面向对象的思想去理解类,而不是把其他语言的那套照搬过来,你应该把java编程思想好好看看,不然java永远学不好。追问多谢你为这个问题打字了,不过你所说的什么”java里面没这个说法“实在不敢苟同,我只不过突然想起这个知识点,忘了具体是什么了。
追答你只能说有main方法的类叫主类,而这根本不是一个严格定义的名称,也根本没有任何经典java书籍里有定义。所以本来就没有多大意义,我不知道你是从哪看到的这个知识点,不要被国内一些乱七八糟的教材误导了,很多时候这种说法都是一些从其他语言转过来的作者把其他语言的一些说话套在java里而已,能理解,但根本不用去纠缠于他叫什么,再申明一次,java里没这个说法,除非你把这个知识点找到,发给我看,我也可以学习一下,谢谢。
追问你好,为此我刚查了下我们学习的教材——《java程序教程》(第六版),含main方法的类可以叫做驱动类,我并不是说死扣定义,我也和你一样不认为一些教材 的说法一定准确,而是要写一篇论文,需要一个说法,。谢谢你的回答,也谢谢你的认知。
本回答被提问者采纳 参考技术B 纯面向对象语言的通用标准,c#也是如此,不允许在类外定义变量、方法、事件等,强调一切皆是对象的思想,main虽然是主函数,也必须定义在某个类里面。 参考技术C main()方法只是程序的入口,类的叫法跟有没有main方法没关系吧。追问我的意思是,有一种叫驱动类,和被驱动类,我想搞清哪一种是哪一种
为啥包含 main 方法的类没有实例化并且在 Java 中仍然可以?
【中文标题】为啥包含 main 方法的类没有实例化并且在 Java 中仍然可以?【英文标题】:How come the class containing the main method is not instantiated and is still OK in Java?为什么包含 main 方法的类没有实例化并且在 Java 中仍然可以? 【发布时间】:2012-05-23 23:11:33 【问题描述】:我开始写我的第一个Java program。
class HelloWorldApp
public static void main(String[] args)
System.out.println("Hello World!"); // Display the string.
只要上面的代码,程序就可以正常运行。但根据我的 OOP 知识,class
只是一个抽象概念,直到你创建了一个同类对象后才会出现。然后,通过该对象,我们调用类中的方法/函数。
但在这个特定示例中,似乎即使没有创建 class
HelloWorldApp
的对象,也会调用 main
方法
对象是在其他地方创建的吗?如果是这样,那部分代码如何知道我的class
名称HelloWorldApp
?
【问题讨论】:
【参考方案1】:因为是static
方法,所以不需要创建实例
JVM 将加载HelloWorldApp
类并在其上调用静态方法,并且由于它是公共 JVM(外部)可以访问该方法
另见
why-is-the-java-main-method-static【讨论】:
这是否意味着我可以在任何其他类中调用任何静态函数?是不是淡化了封装的概念? 是的,你可以,静态字段/方法与类相关联(每个类加载而不是对象),如果它们是公共的,你可以这样做 封装不是编译器强制执行的规则,而是程序员用来尝试创建更好代码的原则。语言和编译器可以帮助我们实现封装,但不会强加于我们。即使是像 Smalltalk 这样的纯面向对象语言也不会强迫您遵循封装。然而,在 Smalltalk 中,类本身就是真实的对象,因此您可以向它们发送它们响应的消息。您甚至可以在子类中继承它们并让子类调用 super。【参考方案2】:Java 应用程序的起点(并不总是)是这个方法
public static void main(String[] args)
System.out.println("Hello World!"); // Display the string.
当您执行java className
时,它会检查该类是否具有 main 方法,因为它是静态的,因此可以在不创建实例的情况下调用它。
如果没有主方法或主方法存在但没有相同的签名,它会抛出一个RuntimeException
说明主方法未找到。
别忘了阅读A closer look at main method。
题外话:
扩展同样的想法,你不需要一个类的实例来引用它的静态方法和字段。
public class MyClass
public static int NUMBER = 10;
public static void String sayHello()
return "Hello";
public void String sayBye()
return "Bye";
public static void main(String[] args)
System.out.println(NUMBER); // No need for object
System.out.println(sayHello()); // No need for object
System.out.println(new MyClass().sayBye()); // sayBye is not accessible at class level have to have an object of MyClass to access sayBye
如果在其他类中调用相同的,那么它可能看起来像:
public class MyClassCaller
public static void main(String[] args)
System.out.println(MyClass.NUMBER); // No need for object just refer the class
System.out.println(MyClass.sayHello()); // No need for object just refer the class
System.out.println(new MyClass().sayBye()); // sayBye is not accessible at class level have to have an object of MyClass to access sayBye
关于static methods的使用/过度使用的精彩讨论
【讨论】:
【参考方案3】:main 方法是静态的,不需要实例
【讨论】:
以上是关于在java中,有main方法的类叫啥类,没有main方法的类叫啥类的主要内容,如果未能解决你的问题,请参考以下文章
在Java中,BufferedReader 是一个啥类啊,有啥作用啊