Java语言中的修饰符

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jpp_aaa/article/details/78737971

1、访问控制修饰符
公开级别:用public修饰,对外公开。
受保护级别:用protected修饰,向子类及同一个包中的类公开。
默认级别:没有访问修饰符,向同一个包中的类公开。
私有级别:用private修饰,只有类本身可以访问,不对外公开。
成员变量、成员方法、构造方法可以处于4个访问级别中的一个(局部变量只能在方法内部被访问,不能用public,protected,private修饰)。顶层类可以处于公开或默认级别,因此顶层类不可以用private和protected修饰。
2、abstract修饰符
abstract可以修饰类和成员方法
语法规则:
●抽象类中可以没有抽象方法,但是包含了抽象方法的类必须被定义为抽象类。
●没有抽象构造方法,也没有抽象静态方法。
●抽象类可以有非抽象的构造方法,在创建子类的实例时可以调用这些构造方法。
abstract class Base{}
class Sub extends Base{
public static void main(String [] args){
Base base1=new Base();//非法,编译出错,不能创建抽象类Base的实例
Base base2=new Sub();//合法,可以创建具体类Sub的实例
}
}
●抽象类及抽象方法不能被final修饰符。abstract修饰符不能和final连用
3、final修饰符
final修饰非抽象类、费抽象方法和变量
●用final修饰的类不能被继承
●用final修饰的方法不能被覆盖
●用final修饰的变量只能被赋一次值
final不能用来修饰构造方法
4、static修饰符
修饰类的成员变量,成员方法和代码块
●用static修饰的成员变量表示静态变量,可以直接通过类名来访问
●用static修饰的成员方法表示静态方法,可以直接通过类名来访问
静态方法中不能用this关键字,也不能直接访问所属类的实例变量和实例方法(必须通过对象引用来访问),但是可以直接访问所属类的静态变量和静态方法,静态方法中也不能使用super关键字
●用static修饰的程序代码块表示静态代码块,当虚拟机加载类的时候就会执行该代码块
被static修饰的成员变量,成员方法被所有实例共享

package vote;

import java.util.HashSet;
import java.util.Set;

public class Voter {
    public static final int MAX_COUNT = 100;// 最大投票数
    public static int count;// 投票数
    public static Set<Voter> voters = new HashSet<Voter>();// 已投票的选民
    public String name;

    public Voter(String name) {

        this.name = name;
    }

    // 投票
    public void voterFor() {
        if (count == MAX_COUNT) {
            System.out.println("投票已结束");
            return;
        }
        if (voters.contains(this)) {
            System.out.println("已经投过票,不能再投了");

        } else {
            count++;
            voters.add(this);
            System.out.println(name + "感谢你的投票");
        }
    }

    public static void printVoteResult() {
        System.out.println("当前投票数:" + count);
        System.out.println("以下选民参与了投票:");
        for (Voter voter : voters) {
            System.out.println(voter.name);
        }
    }

    public static void main(String[] args) {
        Voter voter1 = new Voter("Tom");
        Voter voter2 = new Voter("Mike");
        Voter voter3 = new Voter("Jack");
        voter1.voterFor();
        voter2.voterFor();
        voter3.voterFor();
        Voter.printVoteResult();
    }
}

输出结果:
Tom感谢你的投票
Mike感谢你的投票
Jack感谢你的投票
当前投票数:3
以下选民参与了投票:
Tom
Mike
Jack
注:static和abstract不能一起使用
程序入口main()方法被定义为static方法,可以使java虚拟机只要加载了main()方法所属的类,就能执行main()方法,而无须先创建这个类的实例

猜你喜欢

转载自blog.csdn.net/jpp_aaa/article/details/78737971
今日推荐