精华内容
下载资源
问答
  • 题目代码化: package com.test; public class Test { public void main(String[] args) { System.out.println("test"); } } 结果: 通过powershell再来验证一下: 正常编译,运行报错 ...

    题目代码化:

    package com.test;
    
    public class Test {
    	public void main(String[] args) {
    		System.out.println("test");
    	}
    }
    
    

    结果:
    在这里插入图片描述
    通过powershell再来验证一下:
    在这里插入图片描述
    正常编译,运行报错

    展开全文
  • I'm trying to work this out....In my project, i have a file called 'Hello.java' which is the file with the main() argument and which is called when the program is compiled. And I have another...

    I'm trying to work this out.

    我正在努力解決這個問題。

    In my project, i have a file called 'Hello.java' which is the file with the main() argument and which is called when the program is compiled. And I have another file called MyObj.java which has got just a random class I made up to test java's OO features. I'm trying to do this:

    在我的項目中,我有一個名為'Hello.java'的文件,它是帶有main()參數的文件,在編譯程序時會調用它。我還有一個名為MyObj.java的文件,它只是一個隨機的類,我用來測試java的OO功能。我正在嘗試這樣做:

    class Hello

    {

    public MyObj an_obj;

    public static void main(String[] args)

    {

    setObj();

    }

    public void setObj()

    {

    this.an_obj.set_size(7);

    say("size is " + this.an_obj.get_size());

    }

    }

    In the MyObj.java class i have this code:

    在MyObj.java類中,我有以下代碼:

    public class MyObj

    {

    private int size;

    public MyObj()

    {

    //do nothing

    }

    public void set_size(int new_size)

    {

    this.size=new_size;

    }

    public int get_size()

    {

    return this.size;

    }

    }

    This however gives the error:

    然而,這給出了錯誤:

    "Cannot make a static reference to non-static method setObj() from the type Hello".

    “無法從類型Hello”對靜態方法setObj()進行靜態引用。

    If I add 'static' to the declaration of setObj, i.e

    如果我在setObj的聲明中添加'static',即

    public static void setObj()

    Then I get:

    然后我得到:

    Cannot make a static reference to non-static field an_obj.

    無法對非靜態字段an_obj進行靜態引用。

    My question is, how can I accomplish what I'm doing, i.e setting and retreiving an object's field if the only way to start a program is with the Main method, and the main Method can only call static methods?? In what, how can I do anything at all with this limitation of being able to call static methods only?????

    我的問題是,如果啟動程序的唯一方法是使用Main方法,並且main方法只能調用靜態方法,我怎樣才能完成我正在做的事情,即設置和檢索對象的字段?在什么,我怎么能做這個限制只能調用靜態方法?????

    6 个解决方案

    #1

    You can either add "static" to the member variable as well, or instantiate the class from within your main method. Here is some example code for both approaches:

    您也可以向成員變量添加“static”,或者在main方法中實例化該類。以下是兩種方法的示例代碼:

    /* Static */

    class Hello {

    public static MyObj an_obj;

    public static void main(String[] args) {

    setObj();

    }

    public static void setObj() {

    this.an_obj.set_size(7);

    say("size is " + this.an_obj.get_size());

    }

    }

    /* Non-Static */

    class Hello {

    public MyObj an_obj;

    public static void main(String[] args) {

    Hello hello = new Hello();

    hello.setObj();

    }

    public void setObj() {

    this.an_obj.set_size(7);

    say("size is " + this.an_obj.get_size());

    }

    }

    The primary difference between these two approaches is that in the first, "an_obj" is static--that is to say, there is only one variable for the entire program. If you were to instantiate multiple Hello objects, they would all have the same "an obj" reference. In the second, each Hello object has its own "an obj" reference, each of which can point to a different MyObj instance.

    這兩種方法的主要區別在於,在第一種方法中,“an_obj”是靜態的 - 也就是說,整個程序只有一個變量。如果要實例化多個Hello對象,它們將具有相同的“obj”引用。在第二個中,每個Hello對象都有自己的“obj”引用,每個引用都可以指向不同的MyObj實例。

    Obviously in this simple situation it doesn't make any difference one way or the other, but generally speaking, static members and methods should be avoided when possible.

    顯然,在這種簡單的情況下,它不會以某種方式產生任何差異,但一般來說,應盡可能避免使用靜態成員和方法。

    #2

    Make both the setObj() method and the an_obj variable static, or do something like:

    使setObj()方法和an_obj變量都是靜態的,或者執行以下操作:

    public static void main(String[] args) {

    new Hello().setObj();

    }

    #3

    In addition to all previous answers I’d like to mention that only because you don’t understand a concept of a language that doesn’t necessarily constitute a “limitation”.

    除了之前的所有答案之外,我還想提一下,只是因為你不理解一種語言概念並不一定構成“限制”。

    #4

    You never created an instance of MyObj.

    您從未創建過MyObj的實例。

    There are two logical places to create the necessary object.

    創建必要對象有兩個邏輯位置。

    Hello's initialization. public MyObj an_obj= new MyObj();

    public static void main(String[] args)

    {

    setObj();

    }

    你好初始化。 public MyObj an_obj = new MyObj(); public static void main(String [] args) {     setObj(); }

    Inside main() public MyObj an_obj;

    public static void main(String[] args)

    {

    an_obj= new MyObj()

    setObj();

    }

    在main()內部公開MyObj an_obj; public static void main(String [] args) {     an_obj = new MyObj()     setObj(); }

    Either way, you have to actually create an object.

    無論哪種方式,您都必須實際創建一個對象。

    Additionally, you can make setObj static. However, this is rarely what you intend.

    此外,您可以使setObj靜態。但是,這很少是你想要的。

    The correct thing is for main to (1) create relevant objects, and (2) turn control over to those objects. This is what you should do.

    正確的是main(1)創建相關對象,(2)將控制權交給這些對象。這是你應該做的。

    class Hello

    {

    public MyObj an_obj= new MyObj();

    public static void main(String[] args)

    {

    Hello aHelloObject= new Hello();

    aHelloOject.setObj();

    }

    public void setObj()

    {

    this.an_obj.set_size(7);

    say("size is " + this.an_obj.get_size());

    }

    }

    #5

    You can only call an instance method (i.e. a non-static method) when you have an instance of a class.

    當您擁有類的實例時,您只能調用實例方法(即非靜態方法)。

    #6

    From a simple perspective, there are two different things in Java:

    從簡單的角度來看,Java中有兩個不同的東西:

    objects

    static variables/functions

    Objects get created at runtime, when you cause them to be created. Static things (all of them) are always there, and are loaded as needed.

    當您創建對象時,會在運行時創建對象。靜態的東西(所有這些東西)總是在那里,並根據需要加載。

    While you can mix and match these in your classes, you have to be careful how you use them. A static thing can call an object, but it must create a version of it first. An object, once created can call any static thing it likes.

    雖然您可以在課程中混合使用這些內容,但您必須小心使用它們。靜態事物可以調用一個對象,但它必須首先創建它的一個版本。一個對象,一旦創建就可以調用它喜歡的任何靜態的東西。

    We do tend to create classes that are objects AND have a few static bits as well, but you can have all static things in a class if you want, or you can just have all object-based things.

    我們傾向於創建作為對象的類並且還有一些靜態位,但是如果需要,您可以在類中包含所有靜態內容,或者您​​可以只擁有所有基於對象的內容。

    Static stuff is generally frowned upon, because it is essentially global, which opens up more possibilities for weird behavior. Objects with no static bits are best, and are usually thread safe if they are not calling things outside of there own internal data (make 95% of your code simple and safe, then deal with the complicate 5% in some special classes).

    靜態的東西通常是不受歡迎的,因為它本質上是全局的,這為奇怪的行為開辟了更多的可能性。沒有靜態位的對象是最好的,並且如果它們不調用自己內部數據之外的東西,通常是線程安全的(使95%的代碼簡單而安全,然后在一些特殊類中處理復雜的5%)。

    Paul.

    展开全文
  • 一个类的main()方法必须用static来修饰,这是因为Java运行时系统在开始执行一个程序之前,并没有生成类一个实例,它只能通过类名来调用main()方法作为程序入口。
    一个类的main()方法必须用static来修饰,这是因为Java运行时系统在开始执行一个程序之前,并没有生成类的一个实例,它只能通过类名来调用main()方法作为程序的入口。
    
    展开全文
  • 为什么程序入口一定要是public static void main(String args[])这个样子呢?可以将public 或static去掉吗?或者不加参数可以吗?为什么函数返回是void?有问题,当然得去实践才能得到答案,接下来内容将...

    小伙伴在写Java文件时会不会产生这样子的疑问呢?为什么程序的入口一定要是public static void main(String args[])这个样子的呢?可以将publicstatic去掉吗?或者不加参数可以吗?为什么函数的返回的是void?有问题,当然得去实践才能得到答案,接下来的内容将为大家解决这些疑惑。

    首先将public去掉看看运行效果

    代码如下:
    在这里插入图片描述
    运行效果图:
    在这里插入图片描述
    从图片可以看到编译通过,但是运行不了,报错了,来分析下原因:
    使用public修饰主函数的话,可以让其他类来访问这个函数,如果改用其他修饰(如protected,private),其他类访问不了该方法。因为Java的程序是通过Java的虚拟机JVM来调用的,属于外部调用,所以需要使用public修饰,否则虚拟机无法调用。所以public不能够去掉。

    其次是去掉static,看看运行效果。

    在这里插入图片描述
    出现了同样的错误在这里插入图片描述
    下面来分析一下原因:
    首先因为Java是一门面向编程的语言,除了静态方法可以直接调用之外,其他方法的调用必须通过对象创建的实例来调用,对于主函数来说,是通过Java的虚拟机去调用的,属于外部调用,所以 需要static来声明该方法是静态方法,可以直接通过类名调用。

    然后将void改为int,让其有返回值。

    在这里插入图片描述
    在这里插入图片描述
    依旧报错,显示mian方法必须返回空类型值。同样的来分析一下原因。
    首先,学过其他语言的人都知道,一个方法有返回值,那么在调用这个函数的时候会返回一个值,如果不对其返回的数进行操作,那么则会报错。在Java中,因为main函数是栈中最底层的函数,若出现返回值时,JVM无法对返回值进行上抛,如果有返回值难道抛给操作系统么?这显然是不可能的。看到这或许有人会疑问,为什么C语言的main函数可以有返回值,那是因为C语言在运行时是直接在操作系统运行的,若返回的是0,则说明程序是正常运行的。

    现在来看看最后一个疑问,是关于main函数的参数的。

    首先先将参数去掉,在这里插入图片描述
    在这里插入图片描述
    如图所示,报错了。再将参赛的类型改变一下,发现同样报错了。在这里插入图片描述

    在这里插入图片描述
    再改一下参数的名字在这里插入图片描述
    在这里插入图片描述
    此时发现可以运行了,由此可以得到,main方法中的参数,不能删除,也不能对其的类型进行更改,必须是String型。下面来分析下原因。
    因为args[]提供了与虚拟机交互的一种途径和方法。能够为程序使用者在命令行状态下与程序交互提供了一种手段。这是Java语言所规定的,在平常运用中,可以向args[]这个字符串数组传递参数

    下面来举个例子运用一下这个参数。
    代码如下:

    class Print{
        public static void main(String args[]){
            for(int i=0;i<args.length;i++){
                System.out.println(args[i]);
            }
        }
    }
    

    运行截图:
    在这里插入图片描述

    使用这些参数的方法是在编译完程序之后,在运行程序时,在后面加上所想传的参数,如果有多个参数,则用空格隔开,如上图所示。

    至此,关于主函数的为什么一定要是**public static void main(String args[])**的原因已经讲解完了,如果大家还有什么不懂,欢迎大家一起交流

    展开全文
  • C# Winform项目,在Program.cs文件中,将Main方法上面[STAThread]去掉了,对这个C/S项目中其他form窗体运行或其他功能有影响吗? 请各位帮忙看看,对整个工程正常运行或性能有影响吗?谢谢! 代码如下: ///...
  • 转载自 小菜:关于main... 问题:如果去掉main方法的static修饰符会怎样?答案:程序能正常编译。运行时会抛NoSuchMethodError异常。 问题:public static void写成static public void会怎样?答案:程序正常...
  • java中main方法的 (String[] args)

    千次阅读 2018-04-17 19:51:42
    public static void main(String[] args)是固定入口形式,不能变。java本身不存在不带String args[]的main函数,java程序中去掉String args[]会出现错误。Test.javapublic class test {  public stat...
  • Java笔试面试-常见翻车总结

    万次阅读 多人点赞 2019-12-04 17:55:55
    1.去掉 main 方法的 static 修饰符,程序会怎样? A:程序无法编译 B:程序正常编译,正常运行 C:程序正常编译,正常运行一下马上退出 D:程序正常编译,运行时报错 答:D 题目解析:运行时异常如下: 错误: main ...
  • 使用字符串的方法: trim();去掉字符串两端空格 split();切割 string.join();连接 代码如下:class Program { static void Main(string[] args) { //原字符串 string str = ” hello world,你 好 世界 ! ...
  • C# 去掉List重复元素的方法

    千次阅读 2017-12-08 13:09:55
    比如linq Distinct 等等都可以,看看网上这个例子:去掉modelList中title重复内容,不区分大小写 class Program { static void Main(string[] args) { List modelList = new List() { n
  • 常见面试题翻车合集

    2020-10-28 16:07:50
    1.去掉 main 方法的 static 修饰符,程序会怎样? A:程序无法编译 B:程序正常编译,正常运行 C:程序正常编译,正常运行一下马上退出 D:程序正常编译,运行时报错 答:D 题目解析:运行时异常如下: 错误: main...
  • 本文实例讲述了Java实现去掉字符串重复字母的方法。分享给大家供大家参考,具体如下:package demo;public class Ctrl {public static void main(String[] args){String s = "akkbcccrsa";System.out.println("脚本...
  • 总结个工具类,下次可以直接使用。 public class Trim { public static void main(String[] args) { String str = " Hello Genius! "; //方法1:String.trim();trim()是去掉首尾空格 System.out.prin...
  • 导读热词本文实例讲述了Java实现去掉字符串重复字母的方法。分享给大家供大家参考,具体如下:package demo;public class Ctrl {public static void main(String[] args){String s = "akkbcccrsa";System.out....
  • public class Test01 {  static String s="125,25 35;";... public static void main(String args[]){  System.out.println(s);  String s01=s.replaceAll("[\\p{Punct}\\p{Space}]+", "");
  • 如下所示:import java.util.List;import java.util.ArrayList;import java.util.Set;...public class lzwCode {public static void main(String [] args) {testA();System.out.println("=========...
  • public class Demo { /** * 去掉重复值 */ public static void main(String[] args) { String test = "100,120,166,1555,120,150,100"; String[] test1 = test.split(","); Ar
  • public class hello { static class hello1 extends Thread { ... public static void main(String[] args) ...还有个问题,如果把hello1这个thread类 static去掉,主函数中就找不到它了,必须加static是吗?
  • 一种是用遍历list集合判断后赋给另一个list集合,一种是用赋给set集合再返回给list集合。 但是赋给set集合后,由于set...//set集合去重,不打乱顺序 public static void main(String[] args){ List<String> list =
  • 如下所示:import java.util.List;import java.util.ArrayList;import java.util.Set;...public class lzwCode {public static void main(String [] args) {testA();System.out.println("=========...
  • 本文实例讲述了Java实现去掉字符串重复字母的方法。分享给大家供大家参考,具体如下:package demo;public class Ctrl {public static void main(String[] args){String s = "akkbcccrsa";System.out.println("脚本...
  • import java.util.ArrayList; import java.util.HashSet; import java.util.List;... public static void main(String[] args){ List list = new ArrayList(); list.add(new Integer(1)); list.add
  • 1.去掉 main 方法的 static 修饰符,程序会怎样?A:程序无法编译B:程序正常编译,正常运行C:程序正常编译,正常运行一下马上退出D:程序正常编译,运行时报错答:D题目解析:运行时异常如下:错误: main 方法不是...
  • for循环去掉最后一个符号, < >案例:输入两个数 求n到m之间偶数需求:去掉最后一个逗号代码:方法一方法二方法三 ... // main方法 程序入口 public static void main(String[] args) { //
  • -模拟String类中trim()方法(去掉首尾空格符) public class Test { //模拟trim() public static void main(String[] args) { // TODO Auto-generated method stub String str=" fef fefer "; String ...

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 297
精华内容 118
关键字:

去掉main方法的static