普通方法
1.方法是有访问权限的
2.方法必须写上返回数据的类型,如果不需要返回数据就写void
3.在同一个类中,方法名可以相同,但是方法的签名不能相同(方法的签名=方法名+参数列表的类型)
4.方法上可以使用其他的关键字进行修饰,比如static和final,他们有着不同的意义。
一、static关键字是是什么?
static修饰的代码属于类,定义的变量存储在方法区的静态常量池当中。
二、java为什么设计static关键字?
因为要方便类去使用自己的方法和变量。
三、static关键字:
1.static关键字实例
package com.qcby;
public class A {
public String name = "张三";
public static void run(){
System.out.println("跑的快");
}
public static void fly(){
System.out.println("飞的高");
}
//这些代码以信息的形式存储在内存方法区中,只有创建对象时,这些非静态的方法和变量才会有独立的存储空间,被对象调用
}
package com.qcby;
public class Test {
public static void main(String[] args){
//假设方法和变量上面没有static关键字
A a=new A();
a.run();
a.fly();
a.name="aaa";//只能由对象调用
//如果方法和变量属于非静态方法,他们只有在对象当中,才会被分配内存空间,那么也就是只能由对象才能调用
//如果没有static关键字,那么类是不可以调用自己的属性和方法的,只能用对象去调用
A.name="xxx";
A.fly();
A.run();
}
}
A.name="xxx";
该行代码报错提示,我们可以注意到我的A类当中的name没有用static修饰
画图进行分析
2.static关键字修饰变量
public class Test {
public static void main(String[] args) {
A a1 = new A();
A a2 = new A();
a1.address = "上海";
a1.name = "张三";
a2.address = "天津";
a2.name = "李四";
System.out.println(a1);
System.out.println(a2);
}
}
class A {
//static修饰的变量属于类变量,存储在方法区的静态常量池当中,被所有对象共享
public static String name = "admin";
public String address = "北京";
@Override
public String toString() {
return "A{" +
"address='" + address + '\'' +
"name='" + name + '\'' +
'}';
}
}
static修饰的变量是存储在静态常量池中,所以我们可以见看到name都是李四。
2.static关键字修饰方法
该代码可以验证,非静态方法可以调用静态方法,静态方法不能调用非静态方法。
并且证明了main方法想要可以调用的方法。
3.static关键字修饰代码块
public class Test{
public static void main(String[] args) {
Demo demo = new Demo("---");
}
}
class Demo{
public Demo(String aa){
System.out.println("==="+aa);
}
static {
System.out.println("11");
}
public static Demo demo = new Demo("+++");
static {
System.out.println("22");
}
}
扫描-------加载(编译)--------运行
1.首先寻找main方法,发现main方法在Test类中,发现没有父类也没有static修饰的代码,所以编译Test类,将main方法入栈。
2.执行Demo("---");执行前扫描Demo类,发现没有父类,所以编译Demo类,static修饰的代码块按顺序优先执行
3.首先是“11”
4.执行public static Demo demo = new Demo("+++");调用了Demo构造方法,输出“===+++”
5.输出“22”
6.编译完毕,回到main,执行Demo("---"),输出“===---”
得到的结果为: