java语法

1、关于try,catch语句作用域的问题

   try {
            int i = 9;
        } catch (Exception e) {
            System.out.println(i);
        }

这个表达式发生如下错误:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	j cannot be resolved to a variable

这说明try,catch的作用与是以大括号{}为界,并不是以try,catch语句为界的。

2、只有类文件内部的类可以设置protected/private

private和protected不能修饰外部类的原因
类的成员变量和方法可以使用private和protected修饰。
使用private修饰,表示该类的成员只能在类的内部访问。
使用protected修饰,表示该类的成员可以被类的内部、同包下的其它类以及该类的子类访问。
从组织结构来分析:
类的成员(包过变量、方法、内部类等)的上层结构是类,而类的上层结构是包。
如果类可以使用private来修饰,表示该包下的这个类不能被其它类访问,那么该类也失去了存在的意义,所以不能使用private来修饰类。
如果类可以使用protected来修饰,表示该类所在的包的其它类可以访问该类;该类所在的包的子包的类可以访问该类,但是包没有继承的概念,所以后一句是不对。所以用protected来修饰类也是没有意义的。
综上,类只有public和default修饰。

3、接口中方法的访问权限默认是public

下面的代码是练习策略模式的代码。有一个java语言错误

class a {
    public static void main(String[] args) {
        System.out.println("hello");

        context c = new context(new manSay());
        c.doSay();
    }
}

interface say {
    void doSay();
}

class manSay implements say {
    void doSay() {
        System.out.println("man say.............");
    }
}

class womenSay implements say {
    void doSay() {
        System.out.println("women say.............");
    }
}

class context {
    say say1;

    context(say s1) {
        this.say1 = s1;
    }

    void doSay() {
        say1.doSay();
    }
}

以上代码不能通过编译
下面是错误提示:

java: s.manSay中的doSay()无法实现s.say中的doSay()
  正在尝试分配更低的访问权限; 以前为public

原因一:
JAVA 接口中成员变量修饰符都是 public static final
成员方法修饰符都是 public abstract
不管你写不写,都会默认成这样,可以漏写但是不能错写这是java权限的规定
原因二:
类实现接口的方法,权限没写,默认是default,这样即把原来的pulic权限,缩小为default,这违反
里氏替换原则的要求。该表述为
“派生类(子类)对象可以在程式中代替其基类(超类)对象。”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值