Java编程思想--控制执行流程和初始化与清理

  • 在Java 中,涉及的关键字包括 if-else ,while ,do-while ,for , return , break 以及选择语句 switch,然而, Java并不支持 goto 语句(该语句引起许多反对意见,但它仍是解决某些特殊问题的最便利的方法)。在Java中,仍然可以进行类似 goto那样的跳转,但比起典型的 goto ,有了很多限制。

  • 所有的条件语句都利用条件表达式的真或假来决定执行路径(true 和 false)。
  • if-else 语句是控制程序流程的最基本形式。
  • 迭代 while, do-while  和 for 用来控制循环 , 有时将它们划分为 迭代语句。语句会重复执行,知道起控制做用的布尔表达式得到假的结果为止。
  • for 循环可能是最经常使用的迭代形式,这种在第一次迭代之前要进行初始化。
  • 逗号操作符 : Java里唯一用到逗号操作符的地方就是for循环的控制表达式中。在控制表达式的初始化和步进控制部分,可以使用一系列由逗号分隔的语句,而且那些语句均会独立运行。
  • Foreach 语法是Java SE5引入了一种新的更加简洁的for语法用于数组和容器。
  • return :关键词有两方面的用途 一方面指定一个方法返回什么值(假设它没有void返回值),另一方面它会导致当前的方法退出,并返回那个值。
  • beack 和continue 在任何迭代语句的主题部分,都可用 break 和continue控制循环的流程。其中,break用于强行退出循环,不执行循环中剩余的语句。而continue则停止执行当前的迭代,然后退回循环起始处,开始下一次迭代。
  • switch 有时也被划分为一种选择语句。根据证书表达式的值,switch语句可以从一系列代码中选出一段去执行,其中 switch(exp) exp变量类型只能是 int ,short ,char ,byte 和 enum类型(在 JDK1.7以后,类型可以是String了)

 

用构造器确保初始化

  • 在Java中,通过提供构造器,类的设计者可以确保每个对象都会得到初始化。创建对象时,如果其类具有构造器,Java就会在用户有能力操作对象之前自动调用相应的构造器,从而保证了初始化的进行。
  • 在Java命名采用了C++的方案,即构造器采用与类名相同的名称。
  • 不接受任何参数的构造器叫做 默认构造器 ,Java文档中通常使用术语无参构造器,但是默认构造器在Java出现之前已经使用了许多年了。
  • 构造器有助于减少错误,并使代码更易于阅读。构造器是一种特殊类型方法,因为它没有返回值。这与返回值为空(void) 明显不同。对于空返回值,尽管方法本身不会自动返回什么,但仍可让它返回别的东西。构造器则不会返回任何东西,你别无选择(new 表达式确实返回了对新建对象的引用 ,但构造器本身并没有任何返回值)。假如构造器具有返回值,并且允许人们自行选择返回类型,那么势必得让编译器知道该如何处理此返回值)。

 

方法重载

  • 在Java里,构造器是强制重载方法名的另一个原因。既然构造器的名字已经由类名所决定,就只能有一个构造器名。
  • 那么如果想用多种方式创建一个对象该怎么办呢?
  • 假设你要创建一个类,既可以用标准方式进行初始化,也可以从文件里读取信息来进行初始化。这就需要两个构造器:一个默认构造器,另一个取字符串作为形式参数__该字符串表示初始化对象所需的文件名称。由于都是构造器,所以它们必须由相同的名字,即 类名。为了让方法名相同而形式参数不同的构造器同时存在,必须用到方法重载

 

区分重载方法

  • 要是几个方法有相同的名字, Java如何才能知道你指的是哪一个呢?其实规则很简单: 每个重载的方法都必须有一个独一无二的参数类型列表
  • 也可以通过参数顺序的不同也足以区分俩个方法, 不过,一般情况下别那么做,因为这会使代码难以维护。

 

    static void f(String s,int i){
        System.out.println("String :"+s+"int: "+i);
    }
    static void f(int i,String s){
        System.out.println("int: "+i+"String: "+s);
    }
    
    public static void main(String[] args) {
        f("String first",66);
        f(77,"Int first");
    }

//运行结果
String :String firstint: 66
int: 77String: Int first

 

涉及基本类型的重载

  • 基本类型能从一个 较小 的类型自动提升至一个 较大 的类型,此过程一旦涉及到重载,可能会造成一些混淆。

  • 如果传入的实际参数大于重载方法声明的形式参数,就得通过类型转换来执行窄化处理,如果不那么做,编译器就会报错。

 

以返回值区分重载方法

  • 在区分重载方法的时候,为什么只能以类名和方法的形参列表作为标准呢?能否考虑使用方法的返回值来进行区分呢?例如
void f(){
}
int f(){
return 1;
}
  1. 只要编译器可以根据语境明确判断出语义, 比如在 int x=f() 中,那么的确可以据此区分重载方法。
  2. 不过,有时,你并不关心方法的返回值,你想要的是方法调用的其他效果(这常被称为 为了副作用而调用), 这时你可能会调用方法而忽略其返回值。所以,如果你像下面这样调用方法
f();
  1. 此时Java如何才能判断改用那个f()方法呢? 别人该如何理解这种代码呢?因此,根据方法的返回值来区分重载方法是行不通的。

 

 

默认构造器

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值