• 大话java基础知识一之为什么java的主函数入口必须是public static void


    为什么java的主函数入口必须是public static void main (String[] args);

    很多写javaEE好几年的程序员经常会记得java的主函数就是这么写的,但实际上为什么这么写大都已经忘记。

    由于每天被各种框架,各种技术包围,所以出现了一种知道怎么用但不知道为什么这么用的情况。

    java的主函数是一个java基础知识的大综合,在面试中,从这里就能看出程序员的基础知识掌握程度。

    一、是不是所有的类都可以有主方法?如果是,为什么?如果不是,那么在什么类中可以有主方法。

    首先我们可以看到程序都是写在一个以.java结尾的文档中的,但是一个.java的文档并不是只能存在一个类,它里面可以存在很多类

    但是并不是所有的类都可以有主方法的。只有在此类名与文档名相同的情况下,才可以在此类中存在主函数。如果文件中只有一个类,文件名必须与类名一致

    二、为什么主函数要写public

    这是java修饰符的知识,java中共有四种访问限制修饰符:private,public,protected,default

    private:私有,内部访问
    public:共有,都可以访问
    default:同一个包可以访问
    protected:同一个包或者子类可以访问

    修饰符 同类 同包 子类 不同包
    public
    protected  
    default    
    private      

    需要注意的是,由于访问限制修饰符的存在,所以会有一些默认的规则,保证jvm的安全

    1.java保存的文件名必须与类名一致;
    2.如果文件中只有一个类,文件名必须与类名一致;
    3.一个Java文件中只能有一个public类;
    4.如果文件中不止一个类,文件名必须与public类名一致;
    5.如果文件中不止一个类,而且没有public类,文件名可与任一类名一致。

    而主函数必须用public修饰,由于一个文件中只能有一个public,所以需要让主函数使用public作为类的对外接口,供jvm使用。

    三、主函数的static

    java的static是一个关键字,也是作为java类中方法的修饰符。

    static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。

    1、static变量
     按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。

     用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类的对象时,不生成static变量的副本,而是类的所有实例共享同一个static变量。可用类名直接访问,一旦静态变量被修改,其他实例均对修改可见,故线程不安全。因为static变量独立于任何实例,因此static变量必须被实现,而不能是抽象的abstract。在接口中,static变量默认被限制位static final修饰

    2、static方法

      静态方法可以直接通过类名调用,不需要创建实例,因此静态方法中不能用this和super关键字,不能直接访问当前类的实例变量和实例方法(因为它们都还没被加载)。只能访问当前类的静态成员变量和成员方法。因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract。

    3、static代码块

     static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块仅仅只会被执行一次。

    所以java的主函数入口被修饰成static以便在不用创建类的实例时,就可以调用。

    四、void无返回值的

    这里是方法的副作用和返回值类型

    一个方法的执行,如果在返回一个值之外还导致某些外部“状态”发生变化,则称该方法产生了副作用。这里所谓“状态”发生变化,可以是实例域或静态变量被修改

     1.没有返回值的方法必然有副作用,除非它的方法体是空的或者方法没有意义。所以,没有返回值的方法、有返回值但有副作用的方法称为过程

     2.有返回值而且没有副作用的方法称为函数(function)。

    由于java的主函数是栈中最底层的函数,所以并不存在能够接收的值,所以使用void,无返回的

    五、main方法名(注意是main,很多初学者都会写成mian,这是不一样的)

    main是java主方法的方法名,是不能被改变的,就算错了一个字也是不可以运行的。

    由于java中有关键字(保留字)存在的机制,所以main也类似与一个关键字(但不是),jvm运行时,只会找符合要求的main单词,所以将main改变后,jvm将找不到主入口,方法将不能执行。当然,main也可以作为方法名存在。也可以作为变量名存在。

    在一个类中可以存在多个main方法,这是方法的重载。在名字相同的同时,必须有不同的参数。不允许参数完全相同而只是返回值不同的情况出现。无法进行编译,程序在eclips中显示错误

    六、String数组的参数

    java语言是可以在命令行进行编辑执行的(我估计应该没人在这里玩吧)。这里可以了解到关于java的基本类型和应用类型。

    8种基本类型 

    一、4种整型 
        byte      1字节           -128——127 

        short     2 字节         -32,768 —— 32,767 

        int       4 字节          -2,147,483,648 ——2,147,483,647(超过20亿) 

        long      8 字节   -9,223,372,036,854,775,808——9,223,372,036854,775,807 

        注释:java中所有的数据类所占据的字节数量与平台无关,java也没有任何无符号类型 

    二、 2种浮点类型 
        float    4 字节         32位IEEE 754单精度(有效位数 6 – 7位) 

        double   8 字节         64位IEEE 754双精度(有效位数15位) 

    三、1种Unicode编码的字符单元 
        char    2 字节          整个Unicode字符集 

    四、1种真值类型 
    boolean    1 位             True或者false

    3种引用类型 

    类class 

    接口interface 

    数组array

    我们在命令行输入是不管是什么字符都是一个字符串类型,如数字1可以是字符串“1”等等。所以用字符串的数组类型来装

  • 相关阅读:
    python进程同步,condition例子
    python管道pipe,两个进程,使用管道的两端分别执行写文件动作,带锁(lock)
    无论怎样,拒绝了
    这两天发现又到了写无可写的地步
    用Perl编写Apache模块
    技术开发团队的项目管理工具
    *nix下传统编程入门之GCC
    当kfreebsd 用户遇见openSUSE系统
    kFreeBsd 国内开源镜像站汇总
    [转]编程语言与宗教
  • 原文地址:https://www.cnblogs.com/huanmin/p/6429778.html
Copyright © 2020-2023  润新知