精华内容
下载资源
问答
  • 为什么要使用switch循环结构:因为多重if选择结构从代码上看话,显得结构复杂,容易出错,代码多,冗余且有多次等值判断。为了解决上述问题,我们开发出switch选择结构。if选择结构主要用于区间判断上如 ...

    为什么要使用switch 循环结构:

    因为多重if选择结构从代码上看的话,显得结构复杂,容易出错,代码多,冗余且有多次的等值判断。为了解决上述问题,我们开发出switch选择结构。

    if选择结构主要用于区间的判断上如 boolean类型,switch选择结构用于等值的判断。

    switch语法结构:

    switch(){                     //switch后面的括号里 可以用 int short,buye double等类型。但是String类型只有在JDK 7之后才能用,如果在  JDK 7之前版本使用会报错。

    case 1:                      //需要注意,case 后面的常量名不得重复。 case后面的常量需要安装使用顺序进行排列,switch后面的值会寻找自己和自己相匹配的值,然后执行对应的程序,如果未找到的话,则执行default对应的程序。

    break;                       //break语句是结束当前循环的语句,如果循环后面无break的话,代码会继续向下执行,就会导致系统重复显示。

    case 2:                     //default在循环末尾时,break可以省略(但是我们不推荐这么使用),如果在其他·位置时,必须加上break,不可省略。

    break;

    case 3:

    break;

    default:

    break;

    }

    switch与多重if选择结构的比较:

    相同点:他们都是用来处理多分支的选择结构。

    不同点:多重if选择结构没有switch选择结构的现在,特别适合处理1某个变量处于某个连续区间的情况。

    而switch只能处理等值的判断情况。

    展开全文
  • 北京动力节点-Java编程零基础教程-116-Java基本语法-方法详解-变量的作用域.avi 北京动力节点-Java编程零基础教程-117-Java基本语法-方法详解-方法的调用过程-栈结构及虚拟机栈.avi 北京动力节点-Java编程零基础...
  • finally是异常处理语句结构的一部分,表示总是执行。 finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。 16、sleep...
  • AIC的Java课程7-12章

    2007-07-29 20:55:11
     辨别使用while,for,do…while循环结构执行不同动作。  使用程序控制语句break和continue。  使用基本类型包装器类,理解装箱和拆箱。  [*]了解Java内存机制:栈、堆、常量池等,理解...
  • AIC的Java课程1-6章

    2007-07-29 16:20:11
     辨别使用while,for,do…while循环结构执行不同动作。  使用程序控制语句break和continue。  使用基本类型包装器类,理解装箱和拆箱。  [*]了解Java内存机制:栈、堆、常量池等,理解...
  • JAVA基础课程讲义

    2017-08-30 23:39:14
    循环结构 39 While和dowhile区别 41 For循环 42 break语句和continue语句 47 语句块 48 递归结构 49 本章作业 50 本章上机操作 51 第三章 JAVA面向对象程序开发 52 编程语言发展史 52 类和对象是如何产生发展?...
  • java面试宝典

    2013-02-28 16:04:01
    16、在JAVA 中,如何跳出当前多重嵌套循环? 9 17、构造器Constructor 是否可被override? 9 18、两个对象值相同(x.equals(y) == true),但却可有不同hash code,这句话对不对? 9 19、是否可以继承String 类? 9 ...
  • 疯狂JAVA讲义

    2014-10-17 13:35:01
    1.2 Java的竞争对手各自优势 4 1.2.1 C#简介和优势 4 1.2.2 Ruby简介和优势 4 1.2.3 Python简介和优势 5 1.3 Java程序运行机制 5 1.3.1 高级语言运行机制 6 1.3.2 Java程序运行机制和JVM 6 1.4 开发...
  • java 面试题 总结

    2009-09-16 08:45:34
    finally是异常处理语句结构的一部分,表示总是执行。 finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。 13、sleep()...
  • 2.3.2循环结构 35 任务十三 while语句 35 任务十四 do…while语句 36 任务十五 for循环语句 37 2.3.3 程序跳转语句 38 任务十六 break语句 38 任务十七 continue语句 39 2.4 Java数组 40 任务十八 一维数组声明、...
  • JAVAITERATOR(迭代器)的用法 54 用ITERATOR模式实现遍历集合 54 泛型--基本概念 55 泛型基本概念 55 泛型优点 56 异常处理--基本概念 56 异常分类 56 JAVA关键字与保留字说明使用 68 1.ABSTRACT 68 2....
  • 本章主要讨论局部变量、控制结构、类库、反射、本地方法的用法及代码优化和命名惯例。 第45条 将局部变量的作用域最小化  * 在第一次使用的它的地方声明局部变量(就近原则)。  * 几乎每个局部变量的声明都...

     

      本章主要讨论局部变量、控制结构、类库、反射、本地方法的用法及代码优化和命名惯例。

     

    第45条 将局部变量的作用域最小化

      * 在第一次使用的它的地方声明局部变量(就近原则)。

      * 几乎每个局部变量的声明都应该包含一个初始化表达式。如果还没有足够的信息进行初始化,就延迟这个声明(例外:try-catch语句块)。

      * 如果在循环终止之后不再需要循环变量的内容,for循环优先于while循环。

      * 使方法小而集中(职责单一)。

     

    第46条 for-each循环优先于传统的for循环

      * 如果正在编写的类型表示的是一组元素,即使选择不实现Collection,也要实现Iterable接口,以便使用for-each循环。

      * for-each循环在简洁性和预防Bug方面有着传统for循环无法比拟的优势,且没有性能损失。但并不是所有的情况都能用for-each循环,如过滤、转换和平行迭代等。

      存在Bug的传统for循环代码示例:

     1 import java.util.*;
     2 
     3 /**
     4  * @author https://www.cnblogs.com/laishenghao/
     5  * @date 2018/10/7
     6  */
     7 public class OrdinaryFor {
     8     enum Suit {
     9         CLUB, DIAMOND, HEART, SPADE,
    10     }
    11     enum Rank {
    12         ACE, DEUCE, THREE, FOUR, FIVE,
    13         SIX, SEVEN, EIGHT, NINE, TEN,
    14         JACK, QUEEN, KING,
    15     }
    16 
    17     public List<Card> createDeck() {
    18         Collection<Suit> suits = Arrays.asList(Suit.values());
    19         Collection<Rank> ranks = Arrays.asList(Rank.values());
    20 
    21         List<Card> deck = new ArrayList<>();
    22         for (Iterator<Suit> i = suits.iterator(); i.hasNext(); ) {
    23             for (Iterator<Rank> j = ranks.iterator(); j.hasNext(); ) {
    24                 deck.add(new Card(i.next(), j.next()));
    25             }
    26         }
    27         return deck;
    28     }
    29 
    30 
    31     static class Card {
    32         final Suit suit;
    33         final Rank rank;
    34 
    35         public Card(Suit suit, Rank rank) {
    36             this.suit = suit;
    37             this.rank = rank;
    38         }
    39 
    40         // other codes
    41     }
    42 }

    采用for-each循环的代码(忽略对Collection的优化):

     1     public List<Card> createDeck() {
     2         Suit[] suits = Suit.values();
     3         Rank[] ranks = Rank.values();
     4 
     5         List<Card> deck = new ArrayList<>();
     6         for (Suit suit : suits) {
     7             for (Rank rank : ranks) {
     8                 deck.add(new Card(suit, rank));
     9             }
    10         }
    11         return deck;
    12     }

     

    第47条 了解和使用类库

      * 优先使用标准类库,而不是重复造轮子。

     

    第48条 如果需要精确的答案,请避免使用float和double

      * float和double尤其不适合用于货币计算,因为要让一个float或double精确的表示o.1(或10的任何其他负数次方值)是不可能的。

    System.out.println(1 - 0.9);

    上述代码输出(JDK1.8):

      * 使用BigDecimal(很慢)、int或者long进行货币计算。

     

    第49条 基本类型优先于装箱基本类型

      * 在性能方面基本类型优于装箱基本类型。当程序装箱了基本类型值时,会导致高开销和不必要的对象创建。

      * Java1.5中增加了自动拆装箱,但并没有完全抹去基本类型和装箱基本类型的区别,也没有减少装箱类型的风险。

      如下代码在自动拆箱时会报NullPointerException:

      Map<String, Integer> values = new HashMap<>();
      int v = values.get("hello");

      

      再考虑两个例子:

    例子1:输出true

    Integer num1 = 10;
    Integer num2 = 10;
    System.out.println(num1 == num2);

    例子2:输出false

        Integer num1 = 1000;
        Integer num2 = 1000;
        System.out.println(num1 == num2);

      为啥呢?

      我们知道 “==” 比较的是内存地址。而Java默认对-128到127的Integer进行了缓存(这个范围可以在运行前通过-XX:AutoBoxCacheMax参数指定)。所以在此范围内获取的Integer实例,只要数值相同,返回的是同一个Object,自然是相等的;而在此范围之外的则会重新new一个Integer,也就是不同的Object,内存地址是不一样的。

      具体可以查看IntegerCache类:

     1     /**
     2      * Cache to support the object identity semantics of autoboxing for values between
     3      * -128 and 127 (inclusive) as required by JLS.
     4      *
     5      * The cache is initialized on first usage.  The size of the cache
     6      * may be controlled by the {@code -XX:AutoBoxCacheMax=<size>} option.
     7      * During VM initialization, java.lang.Integer.IntegerCache.high property
     8      * may be set and saved in the private system properties in the
     9      * sun.misc.VM class.
    10      */
    11 
    12     private static class IntegerCache {
    13         static final int low = -128;
    14         static final int high;
    15         static final Integer cache[];
    16 
    17         static {
    18             // high value may be configured by property
    19             int h = 127;
    20             String integerCacheHighPropValue =
    21                 sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
    22             if (integerCacheHighPropValue != null) {
    23                 try {
    24                     int i = parseInt(integerCacheHighPropValue);
    25                     i = Math.max(i, 127);
    26                     // Maximum array size is Integer.MAX_VALUE
    27                     h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
    28                 } catch( NumberFormatException nfe) {
    29                     // If the property cannot be parsed into an int, ignore it.
    30                 }
    31             }
    32             high = h;
    33 
    34             cache = new Integer[(high - low) + 1];
    35             int j = low;
    36             for(int k = 0; k < cache.length; k++)
    37                 cache[k] = new Integer(j++);
    38 
    39             // range [-128, 127] must be interned (JLS7 5.1.7)
    40             assert IntegerCache.high >= 127;
    41         }
    42 
    43         private IntegerCache() {}
    44     }
    IntegerCache

     

    第50条 如果其他类型更适合,则尽量避免使用字符串

      * 字符串不适合代替其他的值类型。

      * 字符串不适合代替枚举类型。

      * 字符串不适合代替聚集类型(一个实体有多个组件)。

      * 字符串也不适合代替能力表(capacityies;capacity:能力,一个不可伪造的键被称为能力)。  

     

    第51条 当心字符串连接的性能

      * 构造一个较小的、大小固定的对象,使用连接操作符(+)是非常合适的,但不适合运用在大规模的场景中。

      * 如果数量巨大,为了获得可以接受的性能,请使用StringBuilder(非同步),或StringBuffer(线程安全,性能较差,一般不需要用到)。

     

    第52条 通过接口引用对象

      * 这条应该与“面向接口编程”原则一致。

      * 如果有合适的接口类型存在,则参数、返回值、变量和域,都应该使用接口来进行声明。

    如声明一个类成员应当优先采用这种方法:

    private Map<String, Object> map = new HashMap<>();

    而不是:

    private HashMap<String, Object> map = new HashMap<>();

      * 如果没有合适的接口存在,则完全可以采用类而不是接口。

      * 优先采用基类(往往是抽象类)。

     

    第53条 接口优先于反射机制

      * 反射的代价:

        (1)丧失了编译时进行类型检查的好处。

        (2)执行反射访问所需要的代码非常笨拙和冗长(编写乏味,可读性差)。

        (3)性能差。

       * 当然,对于某些情况下使用反射是合理的甚至是必须的。

     

    第54条 谨慎地使用本地方法

      * 本地方法(native method)主要有三种用途:

        (1)提供“访问特定于平台的机制”的能力,如访问注册表(registry)和文件锁(file lock)等。

        (2)提供访问遗留代码库的能力,从而可以访问遗留数据(legacy data)。

        (3)编写代码中注重性能的部分,提高系统性能(不值得提倡,JVM越来越快了)。

      * 本地方法的缺点:

        (1)不安全(C、C++等语言的不安全性)。

        (2)本地语言与平台相关,可能存在不可移植性。

        (3)造成调试困难。

        (4)增加性能开销。在进入和退出本地代码时需要一定的开销。如果本地方法只是做少量的工作,那就有可能反而会降低性能(这点与Java8的并行流操作类似)。

        (5)可能会牺牲可读性。

     

    第55条 谨慎地进行优化

      * 有三条与优化相关的格言是每个人都应该知道的:

        (1)More computing sins are committed in the name of efficiency (without necessarily achieving it)than for any other single reason——including blind stupidity.

           —— William AWulf

        (2)We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil.

          —— Donald E. Knuth

        (3)We follow two rules in the matter of optimization:

          Rule 1. Don't do it.
          Rule 2(for experts only). Don't do it yet——that is, not until you have a perfectly clear and unoptimized solution.

          —— M. J. Jackson

      以上格言说明:优化的弊大于利,特别是不成熟的优化。

      * 不要因为性能而牺牲合理的结构。要努力编写好的程序而不是快的程序。

        实现上的问题可以通过后期优化,但遍布全局且限制性能的结构缺陷几乎是不可能被改正的。但并不是说在完成程序之前就可以忽略性能问题。

      * 努力避免那些限制性能的设计决策,考虑API设计决策的性能后果。

     

    第56条 遵守普遍接受的命名惯例

      * 把标准的命名惯例当作一种内在的机制来看待。

     

    本文地址:https://www.cnblogs.com/laishenghao/p/effective_java_note_general_programming.html 

     

    转载于:https://www.cnblogs.com/laishenghao/p/effective_java_note_general_programming.html

    展开全文
  • JAVA程序设计教程

    热门讨论 2013-09-07 21:15:19
    2.1.2 类型的作用 ...................................................................................................14 2.1.3 Java语言的类型 ..........................................................
  • 11.2.1 将一个结构作为另一个结构的成员 414 11.2.2 声明结构中的结构 415 11.2.3 将结构指针用作结构成员 416 11.2.4 双向链表 420 11.2.5 结构中的位字段 423 11.3 结构与函数 424 11.3.1 结构作为函数的变...
  • 7.1.5 伴随结构的智能感知帮助 298 7.1.6 RECT结构 299 7.1.7 使用指针处理结构 300 7.2 数据类型、对象、类和实例 301 7.2.1 类的起源 303 7.2.2 类的操作 303 7.2.3 术语 303 7.3 理解类 304 7.3.1 定义...
  • 千方百计笔试题大全

    2011-11-30 21:58:33
    16、在JAVA 中,如何跳出当前多重嵌套循环? 9 17、构造器Constructor 是否可被override? 9 18、两个对象值相同(x.equals(y) == true),但却可有不同hash code,这句话对不对? 9 19、是否可以继承String 类? 9 ...
  • 擅长组合优化算法大规模集成电路辅助设计算法,对FPGA体系结构以及Verilog和VHDL等硬件描述语言也有非常深入研究,曾主持并参与开发了一套完整设计流程FPGA平台编译软件。 第一部分 模板基础 1 第1章 Hello...
  • 11.2.1 将一个结构作为另一个结构的成员 414 11.2.2 声明结构中的结构 415 11.2.3 将结构指针用作结构成员 416 11.2.4 双向链表 420 11.2.5 结构中的位字段 423 11.3 结构与函数 424 11.3.1 结构作为函数的变...
  • 4.2.9 请结合OO设计理念,谈谈访问修饰符public、private、protected、default在应用设计中的作用。 4.3.0 深拷贝和浅拷贝区别。 4.3.1 数组和链表数据结构描述,各自的时间复杂度。 4.3.2 error和exception的...
  • 算法导论(part2)

    2010-09-09 22:54:12
    一、本书的内容 目前,市面上有关计算机算法的书很多,有些叙述严谨但不全面,另外一些则是容量很大但不够严谨。本书将叙述的严谨性以及内容的深度和广度...第14章 数据结构的扩张 14.1 动态顺序统计 14.2 如何...
  • 算法导论(part1)

    2010-09-09 22:51:05
    一、本书的内容 目前,市面上有关计算机算法的书很多,有些叙述严谨但不全面,另外一些则是容量很大但不够严谨。本书将叙述的严谨性以及内容的深度和广度...第14章 数据结构的扩张 14.1 动态顺序统计 14.2 如何...
  • c#学习笔记.txt

    2008-12-15 14:01:21
    结构类型的变量直接包含结构的数据,而类类型的变量包含对数据的引用(该变量称为对象)。 struct 类型适合表示如点、矩形和颜色这样的轻量对象。尽管可能将一个点表示为类,但结构在某些方案中更有效。在一些情况下...
  • Cooper编著,首先简明扼要地介绍了C#、面向对象编程、继承和UML图,然后分章描述了23种设计模式各自的使用场合,并阐明了模式在大型设计中的作用。每种模式的用法都配有相应的示例程序演示,这些程序收录在随书...
  • 21天学通C++ (中文第五版)

    热门讨论 2010-06-23 16:57:03
    7.5.4 for循环中声明的变量的作用域 7;6 循环小结 7.7 使用switch语句控制程序流程使用switch语句来处理菜单 7.8 小结 7.9 问与答 7.10 作业 7.10.1 测验 7.10.2 练习 第1周复习 第2周课程简介 第8章 ...
  • 新版Android开发教程.rar

    千次下载 热门讨论 2010-12-14 15:49:11
    ----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 ...• SQLite SQLite SQLite SQLite 用作结构数据存储 • 多媒体支持 包括常见音频、视频和...

空空如也

空空如也

1 2
收藏数 40
精华内容 16
关键字:

java循环结构的作用及用法

java 订阅