java是一门面向对象的语言,在编程过程中当然离不开对象的声明,而对象又是通过类定义的,所以java中最重要的就是各式各样的类,在java中,类也是一个程序的基本单位
0x01:默认生成类
在eclipse中创建好一个java类之后会自动生成一个默认类,如下:
public classtest {
}
这是一个空白类,其中class关键字表示定义的是一个类,public是一个修饰符,表示这个类是公开的,test是类名,是根据所创建的java文件自动生成的。
0x02:定义main方法
java程序的运行和c有点相同,都是从一个main方法中运行,在main方法中,可以调用其它自定义的方法。
public classtest {public static voidmain(String []args){
}
}
方法定义了一组执行语句,方法内部的代码将会被依次顺序执行。
这里的方法名是main,返回值是void,表示没有任何返回值(这一点和c也是类似的,方法的返回类型必须与定义的一致。。)。
我们注意到public除了可以修饰class外,也可以修饰方法。而关键字static是另一个修饰符,它表示静态方法,Java入口程序规定的方法必须是静态方法,方法名必须为main,括号内的参数必须是String数组。
0x03:方法的调用
我们当然不能把所有的代码都写在一个main方法中,这样会让代码过于臃肿,且可读性差。可以把实现某种功能(比如获取绝对值、求平方等)的一些代码自定义为一个方法,然后在main方法中调用这个自定义的方法。
public classtest {public static voidmain(String []args){
hello();
}static voidhello(){
System.out.println("hello,");
world();
}static voidworld(){
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 classtest {
// 声明一个Dog类的实例
Dog dog= newDog();public static voidmain(String []args){
// 调用Dog的方法
Dog.run();
Dog.eat();
}
}
// 自定义Dog类classDog{static voidrun(){
System.out.println("dog is running!!");
}static voideat(){
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被复写了三次,有三种含义,分别为:
变量一直存在;
不能被其他文件访问的全局变量和函数;
属于类且不属于对象的全局变量和函数。在一大部分人心中可能只把它理解为“静态”的意思,实际上Java仅仅取了C++中static的最后一个含义:即,不与类的实例相关联,仅与类相关联。
(ps:刚刚起步的小白,若理解有误,还请大佬们多多指正。。。。。。)
***************不积跬步无以至千里***************