java - 基础 - 修饰符

种类:

权限修饰符:

public                       公共的                 本类    同包    子类继承后可以通过子类对象在子类内部中使用    任意位置只要有这个class的对象都可以使用                

基本范围无限制

 

protected                  受保护的            本类    同包    子类继承后可以通过子类对象在子类内部中使用                                                                                         

在本类中使用 或者 相同package的class中声明使用  或者  在不同包的子类中通过自身实例对象使用(person是animal的不同包中的子类,person中声明person对象可以使用animal中的protected属性参数和方法,但是在person中声明animal对象,不能使用animal的protected属性的参数和方法)。

 

默认不写                   默认的               本类    同包                                                                                                                                                                         

在本类中 或者 相同package的class中声明使用。   (class animal 在 A 包, class person在 A 包里面的 B 包也算不同包  )                   

 

private                      私有的               本类                                                                                                                                                                                     

只能在本类中使用

 

使用private等给与权限限制,是为了防止直接操作或者误操作,降低耦合性,添加校验等。所以属性一般设为private。

java对象的特征:继承(extends),封装(将数据方法包装,保护安全性和程序健壮性),多态,(抽象)

 

spring: IOC(控制权反转,控制权交给别人) DI(依赖注入)

 

 

特征修饰符:

final                          最终的,不可改变的

static                        静态的

abstract                    抽象的

native                       本地的

transient                   瞬时的   -----》序列化

synchronized            线程并发使用

volatile                      线程并发使用

 

final                          最终的,不可改变的

修饰: 变量,属性,方法,类

final修饰变量后一旦存入值则不能修改,相当于常量。

变量为基本类型,则值不让修改

变量为引用类型,则地址不让修改

 

属性加上final后必须赋予默认值。

方法加上final后不能被子类重写覆盖。

类加上final后不能被继承修改(一般用于修饰工具类)Math,String,Scanner等

基本类型变量不能直接修改值

 引用类型变量不能修改指向地址,str申请了一个新的地址,想赋给fs失败了

 

 

 

修改引用变量内的值成功。 

 

 

static                        静态的

修饰: 属性,方法,块,内部类

静态元素存在方法区的静态元素区,同一个类的所有实例的static变量都存在同一个内存中,他们操作的是同一个内存值。

静态元素(块和方法等)在类加载时就初始化了,只加载一次。块和构造方法在创建实例时才运行。

package xiushifu;

public class StaticTest {

    public String name;
    public static int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public static int getAge() {
        return age;
    }

    public static void setAge(int age) {
        StaticTest.age = age;  //自动生成的static变量的set方法
    }

    public void show(){
        System.out.println("name = " + this.name + " age = " + this.age);
    }

    public static void main(String[] args){
        StaticTest st1 = new StaticTest();
        st1.name = "aaa";
        st1.age = 10;
        st1.show();

        StaticTest st2 = new StaticTest();
        st2.name = "bbb";
        st2.age = 20;//给st2的age赋值,st1的age也一起被修改了。
        st1.show();
        st2.show();
    }
}

 

 

 常用方法: static final 变量 = 。。。 作为常量使用在增加代码可读性。 

 

 

 

abstract                    抽象的

  只是概念,没有具体执行   

可以用来修饰:方法,类。 

抽象方法: 用abstract修饰,只有结构,没有执行体。  public abstract void aaa();

抽象方法必须放在抽象类 或者 接口中。

抽象类中不是必须有抽象方法,不过一般都会有。

抽象类:

可以包含abstract方法。

包含构造方法,但是不能调用。用来给子类继承。

抽象类:

可以只接单继承抽象类

可以只接单继承普通类(一般不会这么干)

不可以直接被子类继承(子类需要具体化抽象类中的方法)

可以完全没有抽象方法

可以完全没有具体方法 ---  接口interface

 

native                       本地的

执行的是底层其他语言的代码。

transient                   瞬时的   -----》序列化

synchronized            线程并发使用,同时只能有一个执行

volatile                      线程并发使用

posted @ 2019-09-27 17:48  不咬人的兔子  阅读(131)  评论(0编辑  收藏  举报