A
public:项目内公开
private:本类可以访问
protected:本类和子类已经本包可以访问
默认: 本包可以访问,子类不可以。
B
abstract:
1只能修饰类和方法。
2修饰类,类不能被实例化,但可以指向自己的一个子类的引用。
3修饰方法,方法不能有方法体!只有定义没有实现
4不能用来修饰构造函数。
5abstract 也不能和static连用
6一个类有抽象方法那么它一定是抽象类。相反,如果一个类是抽象类,那么它不一定有抽象方法
7抽象类里也可以有被实现的方法,也可以没有。
8抽象类不能和fina连用,抽象方法也不能和fina连用,应为final 修饰的类和方法是不能不继承和重写的。
C
final
1用来修饰类,类不能被继承。
2用来修饰方法,方法不能被重写
3用来修饰变量,变量的值不会被改变。
4final类型的变量只能赋值一次。并且是被显示的初始化(final int var=23),只声明,不赋值是不行的。
D
static
1可以用来修饰变量,方法,代码块
2修饰变量,表示是静态变量,可以用类名打点直接应用
3修饰方法,表示静态方法,可以用类直接访问
4修饰代码块,表示静态代码块,JVM在加载改类的时候,会先执行该代码块。
5static变量,JVM在加载的时候,只分配一次内存!类似全局变量,在各个类的实例之间共享数据。
6静态方法中,不能使用this 和super关键字。
7静态方法必须被实现,应为静态方法是一个类的tedingi功能,它不依赖与他的类的具体实现,也不依赖与他的子类。因此,类必须为自己的静态方法提供实现,所以也不能与Abstract连用。
8作为程序入口的Main方法必须是静态的,这样JVM在加载这个类后,不需要创建类的实例就可以执行它了。在Main方法中不能访问实例变量和实例方法。
9类的构造方法用来初始化类的实例,而类的静态块可以用来初始化类。
package com.socket;
import java.util.HashSet;
import java.util.Set;
public class Voter {
private static final int MAX_COUNT=100;
private static int count;
private static Set<Voter> voters=new HashSet<Voter>();
private String name;
public Voter(String name){
this.name=name;
}
public void voteFor(){
if(count==MAX_COUNT){
System.out.println("投票结束。。。");
return;
}
if(voters.contains(this)){
System.out.println(name+":你不允许重复投票");
}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 tom=new Voter("Tom");
Voter mike=new Voter("Mike");
Voter jack=new Voter("Jack");
tom.voteFor();
tom.voteFor();
mike.voteFor();
jack.voteFor();
Voter.printVoteResult();
}
}