Webservice簡單使用
知識
07-17
看到一個開關語句中default的用法很奇怪,所以就決定研究一下這個騷操作。
原文代碼如下:
- package exam;
- import oypj.tools.*;
- class Shape{
- void draw(){}
- void erase(){}
- }
- class Circle extends Shape{
- void draw(){
- P.rintln("Circle.draw()");
- }
- void erase(){
- P.rintln("Cicle.erase()");
- }
- }
- class Squre extends Shape{
- void draw(){
- P.rintln("Squre.draw()");
- }
- void erase(){
- P.rintln("Squre.erase()");
- }
- }
- class Triangle extends Shape{
- void draw(){
- P.rintln("Triangle.draw()");
- }
- void erase(){
- P.rintln("Triangle.erase()");
- }
- }
- public class Shapes {
- public static Shape randShape(){
- switch((int)(Math.random()*3)){
- default:
- case 0: return new Circle();
- case 1: return new Squre();
- case 2: return new Triangle();
- }
- }
- public static void main(String[] args){
- Shape[] s=new Shape[9];
- for(int i=0;i<9;i++)
- s[i]=randShape();
- for(int i=0;i<9;i++)
- s[i].draw();
- }
- }
輸出的結果:
1.分析代碼:
default 寫在case前面而且default的代碼塊沒有用break。所以當switch中的表達式沒有匹配到0、1、2的時候,
程序會執行default中的語句塊,由於default代碼塊中沒有break,所以當處理完default中的代碼塊時,會繼續往下
執行。
2.修改代碼驗證一下分析:
修改後代碼如下:
- package exam;
- import oypj.tools.*;
- class Shape{
- void draw(){}
- void erase(){}
- }
- class Circle extends Shape{
- void draw(){
- P.rintln("Circle.draw()");
- }
- void erase(){
- P.rintln("Cicle.erase()");
- }
- }
- class Squre extends Shape{
- void draw(){
- P.rintln("Squre.draw()");
- }
- void erase(){
- P.rintln("Squre.erase()");
- }
- }
- class Triangle extends Shape{
- void draw(){
- P.rintln("Triangle.draw()");
- }
- void erase(){
- P.rintln("Triangle.erase()");
- }
- }
- public class Shapes {
- public static Shape randShape(){
- switch(3){
- default: System.out.println("default");
- case 0: System.out.println("default0"); return new Circle();
- case 1: System.out.println("default1"); return new Squre();
- case 2: System.out.println("default2"); return new Triangle();
- }
- }
- public static void main(String[] args){
- Shape[] s=new Shape[9];
- for(int i=0;i<9;i++)
- s[i]=randShape();
- for(int i=0;i<9;i++)
- s[i].draw();
- }
- }
輸出結果:
3.修改後代碼分析:
從運行的結果來看,程序確實是像我們第1點分析的那樣執行。但是,在default語句塊中我們就列印了一個
字元串default,然後程序繼續往下執行的時候執行了case 0中的語句塊。這跟我們想的有點不一樣。當我把
case 1 放在case 0前面的時候,再次執行程序,發現default列印了一個default後,執行了case 1 中的語句
塊。
由此我們可以看出,在開關語句中,把default寫在case前面,而且default的語句塊中沒有任何處理的時候,
當switch()表達式中的值匹配不到case 的時候,就執行default中的代碼塊而且還會默認執行緊靠在default後
的case 代碼塊。我覺得這是java編譯器為了程序能正常運行做的一種處理,因為如果不默認執行緊靠在default
後的case代碼塊的話,程序就沒有返回值,會拋出異常。
※淺談WKWebView使用、JS的交互
※redis緩存和cookie實現Session共享
TAG:程序員小新人學習 |