面向对象:访问控制,final,static

访问控制:


访问控制是给出一套方法,将系统中的所有功能标识出来,组织起来,托管起来,将所有的数据组织起来标识出来托管起来, 然后提供一个简单的唯一的接口,这个接口的一端是应用系统一端是权限引擎。

作用:

1) 防止非法的主体进入受保护的网络资源。
2)允许合法用户访问受保护的网络资源。
3)防止合法的用户对受保护的网络资源进行非授权的访问。

自主访问控制:

自主访问控制,是指由用户有权对自身所创建的访问对象(文件、数据表等)进行访问,并可将对这些对象的访问权授予其他用户和从授予权限的用户收回其访问权限。自主访问控制是一种最为普遍的访问控制手段,特点就是根据主体的身份和授权来决定访问模式。

强制访问控制:

强制访问控制,是指由系统对用户所创建的对象进行统一的强制性控制,按照规定的规则决定哪些用户可以对哪些对象进行什么样操作系统类型的访问,即使是创建者用户,在创建一个对象后,也可能无权访问该对象。

基于对象的访问控制:

基于对象的访问控制(OBAC Model:Object-based Access Control Model):DAC或MAC模型的主要任务都是对系统中的访问主体和受控对象进行一维的权限管理。

基于任务的访问控制模型:

基于任务的访问控制模型(TBAC Model,Task-based Access Control Model)是从应用和企业层角度来解决安全问题,以面向任务的观点,从任务(活动)的角度来建立安全模型和实现安全机制,在任务处理的过程中提供动态实时的安全管理。

基于角色的访问控制模型:

基于角色的访问控制模型(RBAC Model,Role-based Access Model),RBAC模型的基本思想是将访问许可权分配给一定的角色,用户通过饰演不同的角色获得角色所拥有的访问许可权。

final关键字:


1) final 成员变量

java 规定 final修饰的成员变量必须由程序员显式地指定初始值。

静态初始化块去初始化值:

 final static   int a ;
    static {
        // System.out.println("初始化的值 "+ a); 这里如果调用的话会出现异常
         a=18;
         System.out.println("初始化的值 "+ a);
    }

2) final修饰局部变量和形式参数

 public class FinalLocalVariableTest {  
    public void test(final  int a){
//不能对final修饰的形式参数进行赋值
//        a++;
   }
  
    public static void main(String[] args) {
        final  String str;
        str="aaaaa";
//final修饰的局部变量只能被赋值一次 上次成功
        System.out.println(str);
//下面这个非法
//        str="bbbb";
       System.out.println(str);
   }
}

3)final修饰引用类型变量

final 修饰基本类型变量的时候,不能对基本类型变量进行从新赋值,因此基本类型变量不能改变。

final 修饰引用类型变量的时候,它保存的仅仅是一个引用,这个引用类型变量所引用的地址不会改变,对象内容可以改变

 public class FinalReferenceTest {
   public static void main(String[] args) {
        //这里面是引用类型
        final  int [] arr ={4,3,2,1};
        System.out.println(Arrays.toString(arr));
        //下面是对数组进行排序
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));
        //对对象的值进行改变
        arr[2]=100;
        System.out.println(Arrays.toString(arr));
        //arr=null;会出现编译错误
    }
 }

4)final修饰的方法不能被重载

 public class FinalMethodFather {
    public final void test(){  
    }
  }
 class  FinalMethodSon extends  FinalMethodFather{
    //public  void  test()
 }

5) final修饰的类不能被继承

static关键字:


static关键字可以用来修饰变量、方法。

static修饰成员变量:

1)static修饰成员变量不属于对象的数据结构;
2)static修饰的成员变量属于类的范畴,可以直接使用类名引用变量;
3)static修饰的成员变量和类的信息存储在方法区,无论类创建多少对象,一个类中static修饰的成员变量只有一份。

public class Person {
  private static int count;
  public Person() {
    System.out.println(++count);
  }
  
  public static void main(String args[]) {
    Person person1 = new Person();
    Person person2 = new Person();
  }
}

static修饰方法:

1.方法在调用时,会隐式的传递对象的引用(this),例如:
String name = person.getName();

2.static修饰的方法不需要针对某些对象操作,运行结构只跟输入的参数有关,可以通过类名直接引用,例如:
double result = Math.sin(Math.PI/2);

3.static方法调用时没有传递具体的对象,所以在static方法中不能访问非static的方法。比如:
Math.sin()、Math.sqrt()、Arrays.sort()等

你可能感兴趣的