2017-01-02 94 views
-1

我应该编写这段代码,以便ArrIg是Pair的静态嵌套类。但是,我将它们声明为独立类,但代码仍按预期运行。我明白为什么它仍然运行。静态嵌套类的安全性JAVA

据我所知,static防止一旦调用Pair就调用ArrIg对象(假设ArrIg是Pair的嵌套类)。此外,这违反了静态嵌套类的语法,但它仍然有效。我将这些代码暴露给了哪些危险?

public class ClassPair { 

    public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    int[] Ig= {1,2,3,4}; 
    Pair pair= ArrIg.minmax(Ig); 

    System.out.print("min :"+pair.getFirst()+" | max :"+pair.getSecond()); 
    } 

} 


class Pair { 
    public Pair(int a, int b){ 
    first=a; 
    second=b; 
    } 

    public int getFirst(){ 
    return first; 
    } 
    public int getSecond(){ 
    return second; 
    } 

    private int first, second=0;  
} 


class ArrIg{ 

    public static Pair minmax(int [] a){ 

    int min= a[0];//1 
    int max=a[0];//1 

    for(int i=0; i<a.length;i++){ 

     if (min>a[i]) min =a[i];//1 
     if (max<a[i]) max=a[i];//2,3,4 
    } 

    return new Pair(min ,max); 
    } 

} 
+0

你的课'对'没有足够的封装它的数据 - 你应该努力。 – MaxZoom

+0

@MaxZoom我刚刚将第一个和第二个私人字段更改为私有字段。自从我宣布ArrIg是一个内部类,并且我没有将其他更多的危险暴露给我 – BattleDrum

+0

之后,看起来可以接受(并非完美)。 – MaxZoom

回答

0

访问修饰符和嵌套类是不是一种安全机制。事实上,通过反思绕过它们是非常微不足道的。 (它威力事情是,如果你正试图的唯一方案实施一个系统的安全沙箱。

的访问修饰符和嵌套类的真正目的是提供封装。它是关于是关于设计漏洞(不需要的依赖),而不是信息泄漏和更一般的安全问题。在这个特例中,(假设的)危险在于Pair可以被实例化并在封装之外被使用,这可能(假设)是有害的,但是对于类似Pair的课程,这可能是好东西


我还想补充一点,如果你想让人们明白你在说什么,你需要正确地使用这个术语。例如“调用”一个对象是没有意义的。您拨打方法 ...不是对象。