声明和访问控制-----只会产生编译错误

访问修饰符:public、protected、private

非访问修饰符:strictfp、final、abstract

1、访问修饰符:

a、类访问(4个)

A类可以访问B类是指A类可以实现以下操作之一:

  1. 创建B的实例
  2. 扩展类B(称为B的子类)
  3. 访问类B中的某些方法和变量,这依赖于这些方法和变量的访问控制。

默认访问:包级别访问,只有在同一个包中才会看得见有default的类。

public访问:如果试图使用的共有类与你正在编写的类,位于不同的包中,仍然需要导入这个共有类

final访问:不能扩展。不能继承。

abstarct访问:即使有一个方法是抽象的,整个类也是必须声明为抽象的,一定不要忘记,该方法声明结尾处的分号。

abstract class Car{ // 这里因为有抽象方法所以也抽象
    private int speed;
    public abstract void gofast();//这里是分号
    public int gofast(){
        return speed;
    }
}

b、方法和变量访问:

  • 一个类中的方法代码是否能够访问另一个类的成员
  • 一个子类是否能够继承其父类的成员

1)、公有成员:public

访问方法:

  • 调用在同一个类中声明的方法
  • 调用采用该类引用的方法
  • 调用一个被继承的方法

2)、私有成员:private

        只属于这个类,出了这个类任何关于被private修饰的成员的调用都是错误的。私有成员对该成员自己类以外的任何代码来说都是不可见的。
        重写依赖与继承:private不能继承所以不能重写

3)、保护和默认成员:
        区别:默认成员是包级的,出了包=private,对包外也就不可见了。

        保护是==继承的:子类只能通过继承看到受保护的成员。一旦包外子类继承保护成员,这个子类就成了private的了。

4)、局部变量和访问修饰符:

        可以肯定用访问修饰符声明的所有局部变量都将无法编译。

        只有一个修饰符可应用于局部变量-----final


2、非访问修饰符:

  •         最终方法:防止方法在子类中重写
  •         最终参数:方法参数相当于局部变量,只能用于final修饰,所以为最终参数。
  •         抽象方法:抽象类的第一个具体子类必须实现父类的所有抽象方法。抽象类可以没有抽象方法,但有抽象方法的类一定是抽象类。一个方法不能同时标识abstract和final,或abstract和private。抽象方法也不能表示为synchronized、strictfp、native。static 同步方法:synchronized只能用来修饰方法和代码块。能够与访问修饰符任意搭配使用、可以与final一起,但不能与abstract组合。
  •         本地方法:native只能用于方法
  •         Strictfp方法:用作类和方法的修饰符,变量永远不能声明为strictfp

3、变量声明:

1)、实例变量:

        可以使用访问修饰符

        可以final

        可以transient

        不可以abstract

        不可以synchronized

        不可以Strictfp

        不可以native

2)、局部变量:位于栈上,而不是堆上。如果局部变量是对象的引用,该对象自己将被创建在堆上,没有栈对象,只有栈变量。

3)、最终变量:没有最终对象,只会有最终的引用。最终的实例变量必须在使用前赋初值。

final int x=10; //x的值是不能改变的
final Date x = new Date(); // x.setYear(2008); 可以修改值

注意经典:

interface Foo{    //接口变量用于藏着public static final 所以代码会产生编译错误
    Integer x=new Integer(5);
}
class FooImpl implements Foo{
    void dostuff(){
        x=new Integer(5);
    }
}

4)、transient变量:串行化

5)、volatile 只能应用与实例变量

4、静态变量和方法:属于类,不属于任何实例,static修饰的方法和变量与没有实例化的对象的成员是互不可见的。Static的方法不能访问成员变量。Static只能看见类的类型和被static修饰的。其他看不见。实例化的对象可以调用static修饰的但只有一份拷贝。

  •         static 不能访问实例变量
  •         static 不能访问非静态方法
  •         static 能够访问静态方法或变量

静态方法不能重写,但可重新定义

5、声明规则:

1)、源文件、包声明和导入语句

2)、格式化 main():没有正确的main方法是运行时错误,而不是编译时的错误。

Jvm的启动 main()方法的签名:public static void main(String[] arg) 除此之外main没有任何特出的地方

6、接口设计

Runnable的接口方法: public void run(){}

接口看作100%的抽象类,不同是:接口的变量是public static final的。方法是public abstract的,接口本身是public abstract的

设计接口的类:

  •         如果类不是abstract的则需要,设计实现所有的接口的public方法
  •         类是abstract的则可以让非抽象的子类,来实现。
  •         抽象接口隐藏public设计类可不能缺少public,否则就成了默认访问修饰符了。
  •         类 只能扩展(继承)一个类,可以实现(设计)多个接口
  •         接口 扩展(继承多个接口),不可实现(设计)任何东西
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值