精华内容
下载资源
问答
  • JAVA报错Exception in thread “main” java.lang.NullPointerException 我在编写一个需要使用对象数组的代码发现了这个问题。 情况是:我在定义完一个对象数组后,打算给数组的各个元素对象赋值时,出现了报错 在...

    JAVA报错Exception in thread “main” java.lang.NullPointerException

    我在编写一个需要使用对象数组的代码发现了这个问题。

    情况是:我在定义完一个对象数组后,打算给数组的各个元素对象赋值时,出现了报错
    在这里插入代码片 Exception in thread "main" java.lang.NullPointerException at 对象数组.Str.main(Str.java:11)
    出现问题的原因:
    因为在我们定义的对象数组中,每一个元素都是一个对象,既然是对象肯定就要分配内存啊!部分人忽略了这个问题,所以才有了上面的错误。
    解决方法
    给对象数组中的每一个元素对象分配内存
    操作:对象[i]=new 对象的类名();

    举例:我自己的例子
    1.我定义一个类,类名为People,类里面只有一个变量age

    2.我再定义了一个Peopled的对象数组,长度为5个元素
    People [] young=new People[5];
    3.接下来我给对象数组中的每一个元素对象分配内存
    for(int i=0;i<5;i++) {
    young[i]=new People(); //分配内存
    young[i].age=a[i]; //给People数组中的每个元素赋值
    }
    问题解决了!

    下面是具体代码
    没有修改之前的代码:

    public class Str {
    	public static void main(String[] args) {
    		
    		int [] a= {16,17,18,19,18};
    		
    		People [] young=new People[5];//创建一个对象数组
    		
    		for(int i=0;i<5;i++) {
    			young[i].age=a[i];	//给People数组中的每个元素赋值
    		}
    		
    		for(int i=0;i<5;i++) {		//检验结果
    			System.out.print(young[i]);
    		}
    	}
    }
    
    class People{
    	int age;
    }
    

    修改后的代码:

    package 对象数组;
    
    public class Str {
    	public static void main(String[] args) {
    		
    		int [] a= {16,17,18,19,18};
    		
    		People [] young=new People[5];//创建一个对象数组
    		
    		for(int i=0;i<5;i++) {
    			young[i]=new People();			//给每个元素分配内存
    			young[i].age=a[i];	//给People数组中的每个元素赋值
    		}
    		
    		for(int i=0;i<5;i++) {		//检验结果
    			System.out.print(young[i].age+",");
    		}
    	}
    }
    
    class People{
    	int age;
    }
    

    运行结果:
    16,17,18,19,18,

    展开全文
  • 没有了 main 函数,程序还能跑吗?

    万次阅读 多人点赞 2021-07-10 23:11:25
    刑天没有了头仍然可以战斗,程序没有了 main 函数,还能跑吗? 答案是:可以的。 代码 nomain.c #include <stdio.h> #include <stdlib.h> void nomain() { printf("hello world\n

    刑天

    在这里插入图片描述

    刑天,是中国远古神话传说人物,手使一柄巨斧和盾牌,身强力壮,体型巨大的上古巨人,炎帝手下大将,和黄帝争位,被斩去头颅,失了首级后,以双乳为眼,肚脐为口,再战黄帝。

    刑天没有了头仍然可以战斗,程序没有了 main 函数,还能跑吗?


    答案是:可以的。

    代码

    nomain.c

    #include <stdio.h>
    #include <stdlib.h>
    
    void nomain()
    {
        printf("hello world\n");
        exit(0);
    }
    

    编译

    $ gcc -nostartfiles nomain.c -o nomain.out
    /usr/bin/ld: 警告: 无法找到项目符号 _start; 缺省为 0000000000001050
    

    忽略警告
    -nostartfiles 选项是让链接器在链接时不使用标准启动文件


    运行

    $ ./nomain.out 
    hello world
    

    探索

    我们使用 -S 参数将 c 程序编译成汇编,一探究竟

    $ gcc -S -nostartfiles nomain.c
    liyongjun@Box:~/project/c/C_study/others/ld$ cat nomain.s 
            .file   "nomain.c"
            .text
            .section        .rodata
    .LC0:
            .string "hello world"
            .text
            .globl  nomain
            .type   nomain, @function
    nomain:
    .LFB6:
            .cfi_startproc
            endbr64
            pushq   %rbp
            .cfi_def_cfa_offset 16
            .cfi_offset 6, -16
            movq    %rsp, %rbp
            .cfi_def_cfa_register 6
            leaq    .LC0(%rip), %rdi
            call    puts@PLT
            movl    $0, %edi
            call    exit@PLT
            .cfi_endproc
    ...
    

    可以看到程序的入口点确实是 nomain,所以我们的程序可以正常运行。


    疑问

    如果代码里有两个函数,程序该选择哪个作为入口呢?

    #include <stdio.h>
    #include <stdlib.h>
    
    void nomain()
    {
        printf("hello world\n");
        exit(0);
    }
    
    void nomain_2()
    {
        printf("hello world 2\n");
        exit(0);
    }
    
    $ gcc -nostartfiles nomain.c -o nomain.out
    /usr/bin/ld: 警告: 无法找到项目符号 _start; 缺省为 0000000000001050
    $ ./nomain.out 
    hello world
    

    从执行的结果可以看到程序选择了 nomain() 函数作为了程序入口点,看下汇编的内容:

    $ gcc -S -nostartfiles nomain.c
    liyongjun@Box:~/project/c/C_study/others/ld$ cat nomain.s 
            .file   "nomain.c"
            .text
            .section        .rodata
    .LC0:
            .string "hello world"
            .text
            .globl  nomain
            .type   nomain, @function
    nomain:
    .LFB6:
            .cfi_startproc
            endbr64
            pushq   %rbp
            .cfi_def_cfa_offset 16
            .cfi_offset 6, -16
            movq    %rsp, %rbp
            .cfi_def_cfa_register 6
            leaq    .LC0(%rip), %rdi
            call    puts@PLT
            movl    $0, %edi
            call    exit@PLT
            .cfi_endproc
    .LFE6:
            .size   nomain, .-nomain
            .section        .rodata
    .LC1:
            .string "hello world 2"
            .text
            .globl  nomain_2
            .type   nomain_2, @function
    nomain_2:
    .LFB7:
            .cfi_startproc
            endbr64
            pushq   %rbp
            .cfi_def_cfa_offset 16
            .cfi_offset 6, -16
            movq    %rsp, %rbp
            .cfi_def_cfa_register 6
            leaq    .LC1(%rip), %rdi
            call    puts@PLT
            movl    $0, %edi
            call    exit@PLT
            .cfi_endproc
    ...
    

    显然,在 c 程序中,nomain 函数在 nomain_2 函数之前,编译成汇编后,nomain 依然在前面,就被选择作为了程序的入口点。如果我们把 nomain_2 写在前面,那么 nomain_2 就会被选为函数的入口点,验证如下:

    #include <stdio.h>
    #include <stdlib.h>
    
    void nomain_2()
    {
        printf("hello world 2\n");
        exit(0);
    }
    
    void nomain()
    {
        printf("hello world\n");
        exit(0);
    }
    
    $ gcc -nostartfiles nomain.c -o nomain.out
    /usr/bin/ld: 警告: 无法找到项目符号 _start; 缺省为 0000000000001050
    $ ./nomain.out 
    hello world 2
    

    指定

    在不改变代码的情况下,我们可以使用 gcc 的 -e 选项来指定程序的入口函数

    #include <stdio.h>
    #include <stdlib.h>
    
    void nomain_2()
    {
        printf("hello world 2\n");
        exit(0);
    }
    
    void nomain_3()
    {
        printf("hello world 3\n");
        exit(0);
    }
    
    void nomain()
    {
        printf("hello world\n");
        exit(0);
    }
    
    $ gcc -nostartfiles -e nomain_3 nomain.c -o nomain.out
    $ ./nomain.out 
    hello world 3
    

    就像换挡,指定一个挡位作为动力运行点。
    在这里插入图片描述

    展开全文
  • Exception in thread "main" java.lang.Error: Unresolved compilation problem: Syntax error, insert ";" to complete Statement at cn.com.infosec.test.Rsaa.main(Rsaa.java:157)(线程"主要的"java.lang.e...

    怎样解决报错:

    Exception in thread "main" java.lang.Error: Unresolved compilation problem:

    Syntax error, insert ";" to complete Statement at cn.com.infosec.test.Rsaa.main(Rsaa.java:157)(线程"主要的"java.lang.error:未解决的编译问题异常:语法错误,插入"(2);",在cn.com.infosec.test.rsaa.main(rsaa.java:157)上完成语句)

    一开始是:

    然后我选中红波浪线删除就好了,如下第30行已经不报错了。

    明显的报错还容易解决,但隐性的就不好解决了,如下:

    把鼠标放在红叉的地方显示:Syntax error, insert ";" to complete Statement(语法错误,插入“;”以完成语句)

    执行代码后就报

    Exception in thread "main" java.lang.Error: Unresolved compilation problem:

    Syntax error, insert ";" to complete Statement at cn.com.infosec.test.Rsaa.main(Rsaa.java:157)(线程"主要的"java.lang.error:未解决的编译问题异常:语法错误,插入"(2);",在cn.com.infosec.test.rsaa.main(rsaa.java:157)上完成语句)错误。

    我百度了一下,他们说是由于jdk版本的问题,或者新建一个类,把代码复制过去就好了,但我改了还是不行。

    摸索挺久后,才发现了解决方法:

     如上图,将上图中的空白选中,并删除,就好了。

     总结:由于,这是在网上复制别人的代码,所以有些复制下来的代码会存在特殊字符,需要把他们都删除。实在找不到,只好老老实实自己敲一遍代码啦。总之,报这种错误有很多原因,就看你的原因是那种了。

    展开全文
  • 为什么是int main(void),而不是void main(void)?

    千次阅读 多人点赞 2018-04-15 23:11:55
    C/C++ 小误区:void main() 这是基于我们学校老师一直使用void main(),而发的感慨,大一学习C语言时,我就在想,老师上课演示的为什么一直用void main(),而不是int main()呢?不为了偷懒?还是习惯性的语句...

    C/C++ 小误区:void main()

    这是基于我们学校老师一直使用void main(),而发的感慨,大一学习C语言时,我就在想,老师上课演示的为什么一直用void main(),而不是int main()呢?不为了偷懒?还是习惯性的语句呢?在查阅了部分大牛的博客,翻阅了C Primer Plus和C++ Primer Plus这两本圣经级别的书本之后,得出以下结论(有一部分是别人的结论,属于半转载),可能不太严谨,请多多包涵

    其实,当前,很多人甚至市面上的一些书籍,都使用了void main( ) ,其实这是错误的,C/C++中从来没有定义过void main( ), C++ 之父本贾尼·斯特劳斯特卢普 在他的主页上的FAQ 中明确地写着The definition void main( ) { /* ... */ } is not and never has been C++, nor has it even been C.(void main( )从来就不存在于C++或者C)下面我分别说一下C和C++标准中对main函数的定义

     

    1. C 

           在C89 中,main( ) 是可以接受的的经典巨著(C程序设计语言第二版)用的就是main( )不过在最新的C99 标准中,只有以下两种定义方式是正确的: 

               int main( void )

               int main( int argc, char *argv[] )

           如果不需要从命令行中获取参数,请用int main(void);否则请用int main( int argc, char *argv[] )

     

            main函数的返回值类型必须是int,这样返回值才能传递给程序的调用者(如操作系统)

     

           如果main函数的最后没有写return语句的话,C99规定编译器要自动在生成的目标文件中(如exe文件)加入return 0;,表示程序正常退出不过,我还是建议大家最好在main函数的最后加上return语句,虽然没有这个必要,但这是一个好的习惯注意,vc6不会在目标文件中加入return 0;,大概是因为vc6是98年的产品,所以才不支持这个特性现在明白我为什么建议你最好加上return语句了吧!

     

    2. C++

            正如C++ Primer Plus这本书中说的C++98中定义了如下两种main函数的定义方式:

                     int main( )

                      int main( int argc, char *argv[] )

             int main( )等同于C99中的int main( void );int main( int argc, char *argv[] )的用法也和C99中定义的一样同样,main函数的返回值类型也必须是int如果main函数的末尾没写return语句,C++98规定编译器要自动在生成的目标文件中加入 return 0;同样,vc6也不支持这个特性。

     

    3.关于void main

           在C和C++中,不接收任何参数也不返回任何信息的函数原型为void fun(void);可能正是因为这个,所以很多人都误认为如果不需要程序返回值时可以把main函数定义成void main(void)然而这是错误的!main函数的返回值应该定义为int类型,C和C++标准中都是这样规定的虽然在一些编译器中,void main可以通过编译(如vc6),但并非所有编译器都支持void main,因为标准中从来没有定义过void main中如果main函数的返回值不是int类型,就根本通不过编译发出警告,所以,如果你想你的程序拥有很好的可移植性,请一定要用int main

    4.返回值的作用

         main函数的返回值用于说明程序的退出状态如果返回0,则代表程序正常退出;返回其它数字的含义则由系统决定,而在通常情况下,返回非零代表程序异常退出。

     

    5. 那么 int main( int argc, char *argv[], char *envp[] ) 呢?

     

        这当然也不是标准 C/C++ 里面定义的东西!char *envp[] 是某些编译器提供的扩展功能,用于获取系统的环境变量因为不是标准,所以并非所有编译器都支持,故而移植性差,不推荐使用

    *********************************************************************************

    如果您觉得我不够权威,自己查阅C Primer Plus和C++ primer plus 这两本书吧!!!

     

    展开全文
  • main 函数之前执行代码(C 语言)

    万次阅读 多人点赞 2021-09-07 16:05:04
    constructor 属性可以使函数在 main 函数之前执行
  • Java工程中的主函数public static void main(String[] args)

    千次阅读 多人点赞 2019-09-06 09:03:23
    平时写java project的时候,肯定会看到public static void main(String[] args),一说起来,大家都管它叫“主函数”、“主程序入口”等等。但是它到底用在哪里,其中的String[] args到底都有什么,将在这篇博客中...
  • java中main方法发送httpPost请求

    热门讨论 2013-10-29 13:44:03
    java语言后台请求网站操作 java中main方法发送httpPost请求
  • 在C语言编程中通常会看到 **int main()、int main(void)、void main(void)、main()和main(void)、int main() 和 void 首先来看看标准的主函数写法是什么样的,在C99标准(ISO/IEC 9899:1999)的5.1.2.2.1 ...
  • C++之 main() ,void main() ,int main()等区分

    千次阅读 多人点赞 2019-01-16 21:01:38
    1、各种main函数 大家在看各种C++代码主函数时,发现,写法有很多种,比如: int main() { //代码 return 0; } int main(int argc, char* argv[]){ //代码 return 0; } void main() { //代码 } //…… 2...
  • int main与void main的区别

    千次阅读 2018-11-01 15:21:48
    正确而且标准的方式应该是int main()或者int main(int argc, char* argv[])
  • 从事嵌入式开发的伙伴可能会思考过一个问题,我们一般都是使用芯片厂商提供的驱动库和初始化文件,直接从main函数开始写程序,那么系统上电之后,程序怎么引导进main函数执行的呢?还有,系统上电之后RAM的数据是...
  • C语言入门 函数调用 main函数 int main 是什么

    千次阅读 多人点赞 2020-07-25 23:56:40
    目录引入函数main 函数其他 引入 学任何编程语言的时候,大家应该写的第一个程序都是输出“Hello, world!”。 我学python,Java的时候都是,现在学C语言也不例外。 于是就有了以下代码: int main(){ cout <<...
  • 在之前的文章中,介绍了main函数的返回值 和 main函数的传参,本文主要介绍一下main函数的执行顺序。可能有的人会说,这还用说,main函数肯定是程序执行的第一个函数。那么,事实果然如此吗?相信在看了本文之后,会...
  • 深度剖析c语言main函数---main函数的返回值

    万次阅读 多人点赞 2018-07-09 23:19:06
    在接下来的几篇博文中,我将对c语言的main函数进行深入的剖析,分别从函数返回值,函数参数,以及函数的执行顺序对main函数作一总结。本文主要聊聊main函数的返回值。 main函数的返回值  main函数的返回值用于...
  • Flutter(二)——解析main.dart源码

    万次阅读 2019-12-26 19:47:02
    本文目录解析Flutter项目main.dart源码MyApp解析MyHomePage 解析_MyHomePageState 解析 解析Flutter项目main.dart源码 经过本专栏的第一篇博文之后,相信大家对于Flutter的易开发性以及部署开发环境都有了一定的了解...
  • 深入浅出 C++:main()

    千次阅读 2018-07-28 23:35:26
    main() 是 C/C++ 程序执行的进入点,操作系统执行程序时,首先会执行 Runtime Library 内的函数进行必要的初始化,接着才调用 main() 转移控制权,当 main() 返回时,再根据 main() 的返回值调用 exit() 结束程序。...
  • C语言main函数返回值详解

    万次阅读 2019-08-30 23:54:28
    前言:本文程序代码均在...C语言的main函数有两个标准写法 // C99加入两种 main 标准写法 int main(void) // 标准一写法 // 和 int main(int argc,char *argv[]) // 标准二写法 int main(int argc,char **argv) // ...
  • C语言main函数的参数

    千次阅读 多人点赞 2019-08-04 07:56:56
    在我们之前编写的C程序中,main函数是没有参数的,但是在实际开发中,main函数一般都需要参数,没有参数的情况极少。 main函数的参数是从命令提示符下执行程序的时候传入,例如ls 命令。 在以上示例中ls命令...
  • 为什么 main 方法是 public static void ?

    千次阅读 多人点赞 2020-02-18 14:52:05
    文章目录 1、为什么main方法是静态的(static) 2、为什么main方法是公有的(public) 3、为什么main方法没有返回值(Void) 4、总结 main 方法是我们学习Java编程语言时知道的第一个方法,你是否曾经想过为什么 ...
  • 如何简单地理解Python中的if __name__ == '__main__'

    万次阅读 多人点赞 2017-09-09 22:35:42
    1. 摘要通俗的理解__name__ == '__main__':假如你叫小明.py,在朋友眼中,你是小明(__name__ == '小明');在你自己眼中,你是你自己(__name__ == '__main__')。if __name__ == '__main__'的意思是:当.py文件被直接...
  • //--------------------------------------------------标准的main函数格式为:int main(int argc, char *argv[]); /*即返回值为整型,带两个参数,argc为命令行参数的个数,argv为指针数组, 前argc个指针为参数...
  • Python中的_main_与_init_详解

    千次阅读 多人点赞 2019-01-23 19:21:32
    Python 中的 if __name__ == '__main__' 该如何理解 程序入口 对于很多编程语言来说,程序都必须要有一个入口,比如 C,C++,以及完全面向对象的编程语言 Java,C# 等。如果你接触过这些语言,对于程序入口这个...
  • c 语言中,程序一般如下 #include <stdio.h>...void main没有返回值,int main有返回值。 2、返回值类型 int main返回int类型的数据,void main不返回。 但是在C语言推荐写法中,建议使用int
  • unittest之入口main()

    万次阅读 多人点赞 2018-08-15 21:59:21
    前面四章内容分别对TestCase、TestSuite、TextTestRunner和TestResult四个...不过我们一般写完用例后执行用例的入口,并不是这四个类的组合使用,而是最常见的一个写法:unittest.main(),哈哈,这个入口相信大家再...
  • Python中if __name__ == ‘__main__‘:的作用和原理

    万次阅读 多人点赞 2019-05-06 11:37:52
    if __name__ == '__main__':的作用 一个python文件通常有两种使用方法,第一是作为脚本直接执行,第二是 import 到其他的 python 脚本中被调用(模块重用)执行。因此if __name__ == 'main':的作用就是控制这两种...
  • void main 和 int main的区别

    万次阅读 多人点赞 2018-09-13 18:54:44
    main是一切(控制台)程序都必须有的一个入口函数 main函数是否有返回值在绝大多数情况下无关紧要 因为main函数体内的代码一旦运行完毕 这个程序就结束了 int main() 主函数返回的值是0,即 return 0;这个...
  • 在Python中定义Main函数

    万次阅读 多人点赞 2019-05-24 20:49:57
    这个函数通常被命名为main(),并且依据语言标准具有特定的返回类型和参数。另一方面,Python解释器从文件顶部开始执行脚本,并且没有自动执行的特殊函数。 尽管如此,为程序的执行定义一个起始点有助于理解程序是...
  • 上一章介绍了通过外部web容器启动springboot项目,本章介绍通过Springboot的Main函数启动。 一、springboot Main 方式启动 @EnableSwagger2 @SpringBootApplication public class Application { public static ...
  • main函数的参数的含义

    千次阅读 多人点赞 2018-04-24 17:05:34
    最近学习服务器网络编程,遇到了一个问题,main函数的参数,特意整理资料记录之!!! 下面是一个带参数的main函数! #include &lt;iostream.h&gt; int main(int argc,char *argv[]) { for(...
  • Error: Run after build is not possible Main file has non-main package or doesn't contain main function 解决方法: 原因:源码需要建立在src目录下, 启动入口包名需要是main ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,869,702
精华内容 4,347,881
关键字:

main