提前祝大家国庆快乐!虽然是国庆节,也不能停止每天都码代码的习惯。
“雄关漫道真如铁,而今迈步从头越 ” 问题解决的过程是艰辛的,结果是舒坦的。
public static void main
在这里我是针对public static void main(String[] args) {} 里面出现的这些词的具体作用做出的分析。
public
- main方法是程序的入口方法,是要被JVM调用的,所以访问权限应为public。
- public 使得方法main()是公共的可以被共享的,是一个公有的方法,能够被任何对象访问,也能够被jJVM访问。
void
- 使用void来修饰:main方法执行完毕时,并不需要有返回值,所以用 void修饰即可。
- void 指明main()方法无返回值。
static
为什么要由static修饰?
static含义:意思是静态,可以用来修饰成员变量和成员方法。当修饰成员变量时,在内存中只存储一份,可以被共享访问、修改。 当修饰成员方法时,可以被共享访问,也被称为公共方法。
-
首先我们知道在java中调用一个方法,要么是通过实例对象调用,要么是直接通过类名调用。而JVM在调用我们的main方法是需要直接通过类名调用的,不会生成一个实例对象来调用,所以必须由static修饰。
-
用static修饰的就是静态方法。静态方法不依靠对象而存在。其直接与类有关,只要包含在类中,就可以得到执行。因此,main()方法作为程序的入口,在这之前是不可能有任何对象被建立的,也就是在main之前包括main自身不可能是非静态方法。
既然有静态 , 那必然有非静态,即为实例成员
静态成员和实例成员区别
- 下面是静态成员和实例成员使用时候需要注意的点:
- 声明方法时,方法类型前面不使用static修饰的是实例方法
用static修饰的是静态方法,也称类方法。 - java中的静态成员包括静态方法和静态成员变量,静态成员都是由static修饰的。
- java中的实例成员包括实例方法和实例成员变量,实例成员都没有被static修饰。
- 静态方法只能访问静态的成员,不可以直接访问实例成员。
- 实例方法可以访问静态的成员,也可以访问实例成员。
- this的含义,this代表的是当前类对象,静态方法中是不可以出现this关键字的
-
详解调用差别
2. 1 使用对象调用实例类型方法
当字码文件被分配到内存时,实例方法不会被分配入口地址,只有当该类创建对象后,类中的实例方法才会分配入口地址,这时实例方法才可以被创建的对象调用。2.2 使用类名调用方法类
类中定义的方法,在该类被加载到内存时,就分配了相应的入口地址, 这样的类方法不仅可以被类创建的任何对象调用执行,也可以直接通过类名调用,类方法的入口地址直到程序推出时才被取消。但是需要注意,类方法不能直接操作实例变量,因为在类创建对象之前,实例成员变量还没有分配内存。实例方法只能使用对象调用,不能通过类名调用。
如何使用
- 类方法的调用是:
类名.类方法
对象.静态成员方法。(这里不推荐使用,因为static定义之后是大家都可以用的而不是某个对象独有的) - 实例方法的调用是:
必须new出一个对象,即:对象.实例方法
注意点:
- 在一个类中直接使用本类中的方法加不加this,一个意思,暂时看不出区别,后期在继承中做区别。所以在实例方法中调用静态方法时可以加this代表当前对象调用,也可以不加。
通过下面这段代码来实现上面的注意点,使大家进一步理解静态成员和实例成员:
public class Static {
public static void main(String[] args) {
System.out.println("静态方法访问:");
//1.静态方法只能访问静态的成员,不可以直接访问实例成员。
Static.staticMember();
//Static.instanceMember();//报错:非静态方法'nullStatic()'不能从静态上下文中引用
System.out.println(s1);
//System.out.println(s2);//报错:非静态字段's2'不能从静态上下文中引用
//静态方法可以间接实例成员访问
Static sc = new Static();
System.out.println("静态方法间接访问:");
sc.instanceMember();
System.out.println(sc.s2);
System.out.println("-------------------------------------");
//2.静态方法中是不可以出现this关键字的。
System.out.println("出现this关键字报错");
//System.out.println(this.s2);//“Test.Static。这不能从静态上下文中引用
System.out.println("-------------------------------------");
System.out.println("实例方法访问:");
Static s = new Static();
s.instanceMethod();
}
//实例方法
public void instanceMethod(){
//3.实例方法可以访问静态的成员,也可以访问实例成员。
//2.1访问成员变量
System.out.println(s1);
System.out.println(s2);
//2.2访问成员方法
Static.staticMember();
//标记
this.instanceMember();
//instanceMember();//和用this调用表示一个意思
System.out.println("-------------------------------------");
}
/*
调用方法
要在main 方法里面调用, 因为main 方法是程序的入口方法.
* /
/*
java中的静态成员 包括静态方法和静态成员变量,静态成员都是由static修饰的;
java中的实例成员 包括实例方法和实例成员变量,实例成员都没有被static修饰;
* */
//静态变量
static String s1 = "我是静态变量";
//静态方法
public static void staticMember(){
System.out.println("staticMember被执行");
}
//实例成员变量
String s2 = "我是实例成员变量";
//实例方法
public void instanceMember(){
System.out.println("InstanceMember被执行");
}
}
/*结果:
静态方法访问:
staticMember被执行
我是静态变量
静态方法间接访问:
InstanceMember被执行
我是实例成员变量
-------------------------------------
出现this关键字报错
-------------------------------------
实例方法访问:
我是静态变量
我是实例成员变量
staticMember被执行
InstanceMember被执行
-------------------------------------
* */
方法名main的名字可以改吗?
main方法是程序的入口,所以每次我们用的是public static void main的结构作为程序入口。
方法为什么要在main里面调用?
要在main 方法里面调用, 因为main 方法是程序的入口方法。
方法里面的String[] args是调用哪里的值?可以使用并且输出吗?
String[]是一个字符串数组,args表示参数的名称,即表示为接收一个字符串类型的数组,数组名字为args。
下面我将演示一下如何赋值和使用:
- 点击配置(run configuration)。
- 点击编辑配置(editor configuration)。
- 找到构建与运行(build and run)下面的第三个框输入内容即为String[] args的内容。
具体代码实现如下:
public class mainTest {
public static void main(String[] args) {
System.out.println(args[0]);
System.out.println(args[1]);
}
}
/*输出:
Hello
World!
*/
感悟:
当你向不懂得地方寻找答案时,仿佛打开了一扇新世界的大门,这个世界远比你想象的更加big,更加rich。所以作为一名想成为一个优秀码猿,需要不断去学习和接受新知识。
并且可以做到:“温故而知新”。
如果有所错误,还请大家多多指正。