各个参数的含义
public static void main(String args[])
以上的各个参数的含义如下:
· public:表示公共的内容,可以被所有操作所调用
· static:表示方法是静态的,可以由类名称直接调用。java StaticDemo09
· void:表示没有任何的返回值操作
· main:系统规定好的方法名称。如果main写错了或没有,会报错:NoSuchMethodError: main
· String[] args:字符串数组,接收参数的
static概述
static表示“静态”的意思,可以用来修饰成员变量和成员方法
static的主要作用在于创建独立于具体对象的域变量或者方法。
简单理解:
被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。 并且不会因为对象的多次创建 而在内存中建立多份数据
static关键字修饰的成员有如下特点
1.随着类的加载而加载
static修饰的部分会在类加载时,就进行初始化。static修饰的变量和方法存放在方法区,后面根据需要再次赋的值只会不断更替,最终存储最后一次修改的结果。
2.优先于对象而存在
被static修饰的变量和方法是优先于对象存在的,也就是当一个类加载完毕后,即便没有创建对象,也可以去访问。
3.被所有对象共享
因为随着类在方法区中加载,static关键字修饰的成员也同时被加载,这时再根据类创建若干对象时,被static关键字修饰的成员只加载一次,所以是被所有对象共享的。
4.可以使用类名直接调用
静态方法可以使用类名直接调用,静态变量可以使用类名进行修改,也可以使用对象引用进行修改,方法区中存储的永远只有最后一次修改的结果,中间修改的结果不会被存储!
重点:
- 静态成员 在类加载时加载并初始化。
- 无论一个类存在多少个对象 , 静态的属性, 永远在内存中只有一份( 可以理解为所有对象公用 )
- 在访问时: 静态不能访问非静态 , 非静态可以访问静态 !
任务:描述学员。
具有属性: 姓名,年龄,性别,爱好,公司(都是:开课吧),学科(都是:Java学科)。
思考:请结合static修饰属性进行更好的类设计。
public class Demo03 {
public static void main(String[] args) {
Employee e1 = new Employee("依依",19,"女","弹琴");
Employee e2 = new Employee("尔尔",23,"男","下棋");
Employee e3 = new Employee("伞伞",18,"女","书法");
Employee e4 = new Employee("司思",21,"男","绘画");
Employee e5 = new Employee("乌乌",21,"女","健身");
e1.say();
e2.say();
e3.say();
e4.say();
e5.say();
}
}
class Employee{
//员工的属性
private String name;
private int age;
private String sex;
private String hobby;
private static String company = "开课吧";
private static String subject = "java学科";
//对象创建时调用构造方法
Employee (String name,int age,String sex,
String hobby) {
this.name = name;
this.age = age;
this.sex = sex;
this.hobby = hobby;
}
void say() {
System.out.println("学员名字:"+name);
System.out.println("年龄:"+age);
System.out.println("性别:"+sex);
System.out.println("爱好:"+hobby);
System.out.println("公司:"+company);
System.out.println("学科:"+subject);
System.out.println("--------------");
}
面试题:
构造方法 与 构造代码块 以及 静态代码块的执行顺序:
静态代码块 —> 构造代码块 —> 构造方法
class Demo3{
static {
//静态代码块
}
{
//构造代码块
}
Demo3(){
//构造方法
}
}