static静态属性的声明
代码演示:
package demo;
class People
{
private String name;
private int age;
private String course;
public People()
{
}
public People(String name,int age,String course)
{
this();
this.name = name;
this.age = age;
this.course = course;
}
void talk()
{
System.out.println(“my name is “+name+”,i’m “+age+” years old, and i’m study “+course+” now”);
}
}
public class StaticDemo {
public static void main(String[] args)
{
People p1 = new People(“dodo”,21,”java”);
People p2 = new People(“jiahui”,20,”java”);
People p3 = new People(“haha”,21,”java”);
p1.talk();
p2.talk();
p3.talk();
}
}
3个学生在学习java这门课程,考虑一个问题,当我们上完了java课程了,想学习一下linux,我们是不是需要将这三个人的course属性都修改一遍?如果我们的班级有50人了呢?修改50遍的工作量就很大了。这显然需要工作量就很大了。
因此,我们使用static关键字来修改属性,这样用static修饰后的属性就是公共属性了,它是属于类的属性。
代码演示:;
class People
{
private String name;
private int age;
static String course;
public People()
{
}
public People(String name,int age,String course)
{
this();
this.name = name;
this.age = age;
this.course = course;
}
void talk()
{
System.out.println(“my name is “+name+”,i’m “+age+” years old, and i’m study “+course+” now”);
}
}
public class StaticDemo {
public static void main(String[] args)
{
People p1 = new People(“dove”,21,”java”);
People p2 = new People(“huihui”,20,”java”);
People p3 = new People(“haha”,21,”java”);
p1.talk();
p2.talk();
p3.talk();
//我们修改课程信息,等价于 p1.setCourse(“html”)
p1.setCourse(“html”);
System.out.println(“更换完课程信息后:”);
p1.talk();
p2.talk();
p3.talk();
}
}
修改其中一个对象的course属性,其实就是修改了所有人的course属性。
static静态方法的声明
static既可以修饰属性,同样也可以修饰方法,使用static修饰的方法称为“类方法”,使用static修饰的方法除了可以用对象去调用,还可以使用类名调用。上面的例子,我们是直接对属性值进行修改的,在java开发过程中,如果对属性值能够进行修改,是不安全的,我们接下来将course属性私有化,提供一个静态方法来修改课程信息。并使用类名调用
class People
{
private String name;
private int age;
//静态属性私有化
private static String course;
public People()
{
}
public People(String name,int age,String course)
{
this();
this.name = name;
this.age = age;
this.course = course;
}
void talk()
{
System.out.println(“my name is “+name+”,i’m “+age+” years old, and i’m study “+course+” now”);
}
//声明一个静态方法用来修改课程信息
public static void setCourse(String str){
course = str;
}
}
public class StaticDemo {
public static void main(String[] args)
{
People p1 = new People(“dove”,21,”java”);
People p2 = new People(“huihui”,20,”java”);
People p3 = new People(“haha”,21,”java”);
p1.talk();
p2.talk();
p3.talk();
//我们修改课程信息,等价于 p1.setCourse(“html”)
People.setCourse(“html”);
System.out.println(“更换完课程信息后:”);
p1.talk();
p2.talk();
p3.talk();
}
}
static静态代码块
代码演示:
package demo;
class Person{
public Person(){
System.out.println(“执行Person构造方法”);
}
static{
System.out.println(“执行Person类的static方法”);
}
}
public class StaticDemo{
static{
System.out.println(“执行StaticDemo类的static方法”);
}
public static void main(String[] args) {
System.out.println(“执行main方法”);
Person p1 = new Person();
Person p2 = new Person();
}
}
代码讲解:
1.一个类可以使用不包含在任何方法体类的静态代码块
2.当类被加载的时候,static静态代码块会优先执行,且只执行一次
3.静态代码块,通常用来进行类属性(static修饰的属性)赋值
在同一个类下,使用static关键字修饰方法
有时候我们需要在一个类下包含main()方法,而此时我们还想在同一个类下,执行某些代码逻辑,完成一些功能,这时候我们就需要对方法进行static修饰,不然main()方法没法调用
代码演示:
package demo;
public class StaticDemo{
public static void main(String[] args) {
int a = 15;
int b = 16;
System.out.println(sum(a, b));
}
public static int sum(int a,int b){
return a+b;
}
}
代码讲解:使用static修饰方法后,在main()方法里,我们就可以直接使用方法名即可完成调用。
static关键字,修饰的属性和方法,我们都可以理解为修饰后的属性和方法,不再属于单个对象,它是属于整个类的。静态代码块在类加载的时候会优先执行,且只执行一次。