java程序结构

java是一门面向对象的语言,在编程过程中当然离不开对象的声明,而对象又是通过类定义的,所以java中最重要的就是各式各样的类,在java中,类也是一个程序的基本单位

0x01:默认生成类

在eclipse中创建好一个java类之后会自动生成一个默认类,如下:

public class test {

}

这是一个空白类,其中class关键字表示定义的是一个类,public是一个修饰符,表示这个类是公开的,test是类名,是根据所创建的java文件自动生成的。

0x02:定义main方法

java程序的运行和c有点相同,都是从一个main方法中运行,在main方法中,可以调用其它自定义的方法。

public class test {
    public static void main(String []args){
        
    }
}

方法定义了一组执行语句,方法内部的代码将会被依次顺序执行。

这里的方法名是main,返回值是void,表示没有任何返回值(这一点和c也是类似的,方法的返回类型必须与定义的一致。。)。

我们注意到public除了可以修饰class外,也可以修饰方法。而关键字static是另一个修饰符,它表示静态方法,Java入口程序规定的方法必须是静态方法,方法名必须为main,括号内的参数必须是String数组。

0x03:方法的调用

我们当然不能把所有的代码都写在一个main方法中,这样会让代码过于臃肿,且可读性差。可以把实现某种功能(比如获取绝对值、求平方等)的一些代码自定义为一个方法,然后在main方法中调用这个自定义的方法。

public class test {
    public static void main(String []args){
        hello();
    }
    static void hello(){
        System.out.println("hello,");
        world();
    }
    static void world(){
         System.out.print("world!");
     }
}

方法的调用与c是一样的,直接使用方法名就行,有参数的话需要传入对应类型的参数。但不同的方法的定义与c中有点不一样,因为java中main方法是static类型,在自定义方法时也要在前面加航static,要不会报错:

Cannot make a static reference to the non-static method hello() from the type test

0x04:类的调用

在复杂一点的代码中,只自定义方法也还是不够的,还需要自定义类。 类的使用和方法略有不同,必须通过类的实例调用类里面的方法。

public class test {
   // 声明一个Dog类的实例 Dog dog
= new Dog(); public static void main(String []args){
      // 调用Dog的方法
Dog.run(); Dog.eat(); } } // 自定义Dog类
class Dog{ static void run(){ System.out.println("dog is running!!"); } static void eat(){ System.out.println("dog is eating!!"); } }

关于为什么java的静态方法中 可以调用的方法、可以使用的成员变量必须时静态的,网上查了一下,有这样一段话,“由于静态方法可以不通过对象进行调用,因此在静态方法里,不能调用其他非静态变量,也不可以访问非静态变量成员。”

作者:知乎用户
链接:https://www.zhihu.com/question/20834765/answer/16364708
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

静态方法实际是类的方法,而不是关于对象的方法。所以不是“可以不通过对象调用方法”,而是恰恰应该使用类来调用,而且鼓励这种写法,而不是通过对象调用。即:静态方法不和对象相关,而是仅仅和类相关。
为啥呢?解释是这样的:在一般的类中定义的方法中,非静态类其实不仅仅有他们后面括号里面的显式参数(比如 public int getField(String param1, int param2)这个方法,显式参数是param1和param2),还包括一个隐式参数:即这个调用方法的对象(即this)。而静态方法,则没有这个隐式的参数,仅仅就只有括号中的显式参数。
既然是因为静态方法不和对象关联,那么它就只能用同样仅仅和类关联而不和对象关联的实例域,毕竟不是静态的实例域在不同对象中基本上都是不同的嘛。

而理解这个道理,最最关键的一点是:
java中的“static”和C++中的“static”含义并不完全一样!!!C++中的关键字static被复写了三次,有三种含义,分别为:
  1. 变量一直存在;
  2. 不能被其他文件访问的全局变量和函数;
  3. 属于类且不属于对象的全局变量和函数
在一大部分人心中可能只把它理解为“静态”的意思,实际上Java仅仅取了C++中static的最后一个含义:即,不与类的实例相关联,仅与类相关联。

(ps:刚刚起步的小白,若理解有误,还请大佬们多多指正。。。。。。)

***************不积跬步无以至千里***************

原文地址:https://www.cnblogs.com/liangshian/p/11711838.html