java基础学习4
访问修饰符:
- private: 私有的。只有在类的主体中才可以访问。只能修饰属性和方法,不能修饰类。
- protected: 受保护的。该类及子类的成员均可以访问,同一个包中的类也可以访问,只能修饰属性和方法不能修饰类
- public:公共的。该类或非该类均可以访问
- 默认的:不使用修饰符。只有相同包中的类可以访问。
static修饰符:
static修饰符可以修饰变量、方法或代码块
静态变量:
- 类中的静态变量属于类,而不属于某个特定的对象
- 类的静态成员可以与类的名称一起使用,不需要创建类的对象。
- 静态变量或方法也称为类的变量或方法
- 不管创建了类的多少示例,整个类中静态变量的副本只有一个。
- 引用静态变量时建议使用类名来调用
- 声明为static的变量实质就是全局变量
静态方法:
static修饰的方法为静态方法,目的是使该方法独立于类的示例,使用类去访问,也叫类方法。
特征:
- 类的静态方法只能访问其他的静态成员,不能访问非静态的成员
- 静态方法中没有this关键字
- 静态方法不能覆盖为非静态方法
静态代码块:
static int a;
static {
a = (int)(100.0 * Math.random());
}
- 需要通过计算来初始化静态变量,可以声明一个静态块。
- 静态块在类被加载时执行一次
- 只能初始化类的静态数据成员
单态设计模式:
设计模式:在大量实践中总结和理论化之后优选的代码结构、代码风格、UI及解决问题的思考方式
单态设计模式:采取一定的方法保证在整个软件系统中,某个类只能存在一个对象实例,并且该类只提供一个取得其对象示例的方法。
两种方式:
public class TestSingle {//形式一
private static final TestSingle onlyone = new TestSingle();
// private static final 修饰后只能产生一个对象
private TestSingle() {
//不能在类的外部使用new但是在类的内部可以
}
public static TestSingle getTestSingle() {
return onlyone;//外面只能通过方法调用活的一个对象
}
}
public class Singleton {//形式二
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
final修饰符(这里很像const):
final 修饰符可以修饰类、方法、变量。在修饰不同的对象时是不同的,但是代表不可改变
- final修饰类
final 修饰的类不能被子类继承 - final修饰方法
- 在方法声明中使用final关键字向编译器表明子类不能覆盖此方法。
- 在声明类中,一个final方法只能被实现一次
- 类为final修饰的,那么它的方法隐式的为final方法
class TestFinal {
final void f() {}
}
class Further extends TestFinal {
final void f(){}//错误 final方法不能被覆盖
}
- final 修饰变量:
- 不可修改变量
- 只能被初始化一次
- 实质是一个常量
abstract修饰符:
规则:
- 修饰的类即为抽象类, 不能被实例化
- 构造方法和static方法不能被是抽象的
- 父类的抽象往往在子类中实现,抽象类可以具有指向子类对象的对象引用
一个类中有抽象方法则这个类也应该是抽象类
接口:
接口即规范。
接口的定义及实现:
java中interface关键字来定义接口。接口中的方法都只有声明,没有方法主体。
public interface PCI { // 定义了一个PCI接口
public void start(); //定义了一个开始的方法
public void stop(); //定义了一个结束的方法
}
接口中只能有抽象方法。接口就是永来被子类实现的,这样可以让不同的子类遵守相同的规范,但却又有自己的实现。
class SoundCard implements PCI {
public void start(){
System.out.println("DUDU");
}
public void stop(){
System.out.println("send...");
}
}
当一个类实现一个接口时,必须实现这个接口中定义的所有方法。否则这个类必须定义成抽象的。
接口中的常量:
在接口定义的变量默认是public static final修饰的,变量值不能改变,这种变量也可以叫做常量。
接口中的常量:
public interface Runner {
public void run();
}
public interface Constants {
public static final int COLOR_RED = 1;
public static final int COLOR_GREEN = 1;
public static final int COLOR_BLUE = 1;
}
class Car implements Runner, Constants { // 实现两个接口,用","分隔多个接口
public void run() {
System.out.println("车颜色是:" + COLOR_GREEN);
System.out.println("用四个轮子跑")l
}
}