6/23作业:static和final

来源:互联网 发布:苹果6为什么没有4g网络 编辑:程序博客网 时间:2024/06/06 12:47

1.高级类特性

可以通过以下修饰符实现类的一些高级特性

static:修饰属性、方法、块、内部类

final:修饰类、常量属性、方法、局部常量(部分在后续学习)

abstract:修饰类、方法

synchronized:修饰方法、同步代码块

 

 

2.static属性

----static基本概念

----static属性

 

static被称为静态,可以用来修饰类的属性或者方法。

 

如果类的某个属性,不管创建多少个对象,属性的存储空间只有唯一的一个,那么这个属性就应该用static修饰,被static修饰的属性被称为静态属性。

static属性可以使用对象调用,也可以直接用类名调用。

 

静态属性是类的所有对象共享的,即不管创建了多少个对象,静态属性在内存中只有一个。

public class Employee {

private String name ;

private double salary;

private static int count;

 

 

 

public class Employee {

 

private String name;

private double salary;

private  static int count;

 

public Employee(String name, double salary) {

      super();

      this.name = name;

      this.salary = salary;

      count++;

}

public static void main(String[] args) {

     Employee e1=new Employee("Alice",3000);

     Employee e2=new Employee("John",6000);

 

     System.out.println(e1.name+" "+e1.salary+" "+e1.count);

     System.out.println(e2.name+" "+e2.salary+" "+e2.count);

 }

}

可见,输出的count都为2,说明两个对象调用的count是一个内存空间的值,而namesalary分别是各自初始化时赋的值。

         可以理解实例变量和静态变量的区别。静态的属性与对象没有关系,是所有对象共享的,只与类有关。

 

 

 

3.static方法

-----static方法定义

-----static方法的作用

-----static方法的重要性

如果某个方法不需要与某个特定的对象绑定,那么该方法可以使用static修饰,被static修饰的方法称为静态方法。

static方法可以使用对象调用,也可以直接用类名调用,建议用类名直接调用

 

 

public class TicketSeller{

    private static int ticket=11;

    public static void sellticket(){

       ticket=ticket-1;

       System.out.println("卖票的静态方法");

    }

}

public class Test{

public static void main(String[] args) {

   TicketSeller .sellticket();

 }

}

如果某个方法与实例无关,也就是说不管哪个对象调用这个方法,都执行相同的操作,与对象没有关系,则应该定义为静态方法。不需要创建对象后再使用该方法。

例如:API中的Math类,都是静态方法,因为进行数学运算时,与Math对象本身无关,使用类直接调用即可。

※总结

static方法定义

static方法的作用

static方法的重要性

本类的方法之间的调用

任何方法都可以直接调用静态方法

静态方法不能直接调用非静态方法,需要创建对象,用对象名调用非静态方法

 

 

 

 

4.static

----static

----static块的语法

----static块的用途

static块和static的属性以及方法的性质是相同的,用static修饰的代码块表示静态代码块,当Java虚拟机加载类时,就会执行该代码块。

 

区别在于语法不同

直接在代码块前,加上关键字static即成为静态块。

static{

System.out.println("123");

System.out.println("123");

System.out.println("123");

}

静态块只有在类加载的时候被执行一次,不管创建多少个对象,都不会再执行。

 

如果一个类加载的时候,总要预先做一些事情,则可以放在静态块中,例如,读取一个属性文件,进行一些常规配置,写一些日志等。

 

一个类中可以有多个静态块,按照顺序执行。

 

 

 

 

5.final属性及参数

----final的定义

----final的使用

----Final 用于声明属性,方法和类

 

属性:定义就必须直接赋值或者在构造方法中进行赋值,并且后期都不能修改。

 

方法:定义必须有实现代码,并且子类里不可被覆盖。

 

:不能被定义为抽象类或是接口,不可被继承。

 

final修饰属性

final修饰属性时,基本数据类型的属性将成为常量,不能被修改

一些数学定理中的常量经常使用final修饰

π= 3.14159265358979

E= 2.718281828459045

 

private int index;

private static final double pai=3.14;

private final int level;

 

public Test(){

level=0;

}

 

public Test(int index){

this.index=index;

level=1;

}

final属性赋值

 

在声明时同时赋值,往往与static一起使用

 

声明时不赋值,必须在构造方法中逐一赋值

 

总的原则:保证创建每一个对象的时候,final属性的值是确定的

对参数做final修饰

在方法参数前面加final关键字,为了防止数据在方法体中被修改。

 

 

 

 

 

6.变量及常量的总结

public class Employee {

 

private String name;

private double salary;

private  static int count;

 

public void work(String  leader){

String taskname=null;

}

在类中声明的变量或常量叫属性,或者叫成员变量,如namesalarycount

 

在方法中声明的变量叫局部变量,或者临时变量。

 

属性可以使用四种权限修饰符修饰,局部变量不可以

 

属性可以使用static修饰,局部变量不可以

 

public class Employee {

 

private String name;

private double salary;

private  static int count;

 

public void work(String  leader){

String taskname=null;

}

属性可以使用final修饰,局部变量也可以

 

属性的生命周期很长,随着类加载或者创建对象被初始化,直到没有对象引用才回收

 

局部变量生命周期很短,执行某个方法时临时被初始化,方法结束即被回收。

 

如果局部变量与属性重名,则遵守就近原则,可以使用this区分,后续学习

 

public class Employee {

 

private String name;

private double salary;

private  static int count;

 

public void work(String  leader){

String taskname=null;

}

属性可以在整个类中使用,局部变量只在当前方法中使用

 

属性都有默认的初始化值,如引用类型都是null,整型是0等,局部变量不被自动初始化,必须手工初始化,如taskname手工指定为null才为null,而属性name默认就为null

 

 

原创粉丝点击