1、类
package com.wyq.study;
public class Student {//创建类
//创建属性
static String name;
static int age;
//创建静态属性
static String school;
//静态变量,类变量,因为在使用时,使用语法为 类名.静态变量名 Student.school = "sdfdsf";
//创建构造方法
public Student(){
System.out.println("这里是无参的构造方法。。。");
}
public Student(String name){
System.out.println("这里是带一个参数的构造方法:name="+name);
}
public Student(String name,int age,String school){
System.out.println("这里是带有三个参数的构造方法:大家好,我叫:"+name+",我今年:"+age+"岁了,我就读的学校是:"+school);
}
//创建普通成员方法
public void study(String lesson,double score){
learn(name, name, name);
System.out.println("这里是带有三个参数的构造方法:大家好,我叫:"+this.name+",我今年:"+this.age+"岁了,我就读的学校是:"+this.school);
System.out.println("在今年的考试中,我学了"+lesson+"课程,考了"+score+"分。");
}
//创建静态方法
public static void learn(String lesson1,String lesson2,String lesson3){
System.out.println("这里是带有三个参数的构造方法:大家好,我叫:"+name+",我今年:"+age+"岁了,我就读的学校是:"+school);
System.out.println("在今年的考试中,我学了"+lesson1+"课程,还学习了"+lesson2+"课程和"+lesson3+"课程。");
}
//创建普通代码块
{
System.out.println("这里是普通代码块");
}
static {
System.out.println("这里是静态代码块。");
}
/**
* 代码块:
* (1)普通代码块,就是一个简单的代码块,用花括号{}括起来的
* (2)构造代码块,在类中定义,运行效果优先于构造方法先执行
* (3)静态代码块,在构造代码块前边加static关键字
* (4)同步代码块,使用sychronized进行修饰
* 运行顺序为:静态代码块》main方法》构造代码块》构造方法
*/
}
2、调用
package com.wyq.study;
public class TestStudent {
public static void main(String[] args) {
//首先创建对象
Student stu = null; //在栈内存中声明
stu = new Student(); //在堆内存中开空间,同时,这也是调用无参的构造方法,印证了构造方法是在创建对象时调用
/**
*(1) static修饰的属性,在赋值的时候,需要使用类名.属性名去赋值,但是也可以使用对象名.属性名去赋值;
* 而非静态属性,在赋值的时候,一般使用对象名.属性名进行赋值。
* (2)static修饰静态方法,使用static修饰的静态方法,里边使用到的属性都必须是静态属性
* 同时在static方法中不可以使用this关键字,因为static的属性或者方法,在类加载到内存的时候,一同加载到内存中了,而在这个时候,还没有创建对象呢,所以不能使用this,
* 所以程序里边不能使用this.name,成员变量,也不能使用成员方法。
* 如果需要在静态方法中使用其他的普通方法或者普通属性,那么必须将其他的属性或者方法变成静态的属性或者方法,否则程序会报错。
* (3)
*/
//给属性赋值
stu.age = 20;
stu.name = "张三";
//给静态属性赋值
Student.school = "北京大学";
stu.school = "清华大学";
//调用普通方法
// stu.study("计算机", 99.99);
// System.out.println("普通方法调用完毕。。");
// System.out.println("程序将要调用静态方法了。。。");
// stu.learn("java", "语文", "数学");
}
}
static关键字进行修饰:
1、修饰属性,被static修饰的属性,在进行赋值的时候,使用类名.属性名进行赋值,或者使用对姓名.属性名进行赋值
2、修饰方法,被static修饰的方法,在使用属性的时候,所涉及到的属性都必须是使用static修饰过得
3、static修饰的方法中,在使用属性的时候,不能使用this.属性名,因为static修饰的是在类加载到内存的时候已经加载进来了,可是this修饰的,在这时候,还没有创建对象,所以还没有加载类
4、static可以修饰代码块,被static修饰的代码块称谓静态代码块,执行顺序是优先于main方法先执行的。