笔记 <Core Java2 卷1>第三章 基本编程结构

来源:互联网 发布:网络言论自由作文800字 编辑:程序博客网 时间:2024/04/30 07:40

1、与C/C++一样,关键字void表示这个方法没有返回值,所不同的是main方法没有给操作系统返回“退出代码”。

      - 如果程序正常结束,那么退出代码为0;否则退出代码是一个非0数字。

      - 如果希望在中止程序时返回其他代码,那就需要调用System.exit(int stsus)方法。结束所有的线程需要用到该方法。


2、Int整型数据:

      在C/C++中,int表示的整形与目标机器相关。在8086这样的16位处理器上占2字节,在SUN SPARC这样32位处理器上,占4字节,在Intel Pentium处理器上,在具体操作         系统上占各有不同,对于DOS和Windows3.1,int占2字节,当windows程序使用32位模式时,int占4字节。

      而JAVA所有数值类型所占据的字节数量与平台无关。且,JAVA无Unsigned Type数据类型。


3、Double数据:

      (1)没有后缀F的浮点数值默认为double类型。

      (2)三种溢出和出错情况:

            -正无穷大 Double.POSITIVE_INFINITY 

            -负无穷大 Double.NEGATIVE_INFINITY

            -非数值型 Double.NaN

              注:if ( x == Double.NaN ) // is never true  因为所有“非数值”的值都认为是不相同的

                      if ( Double.isNaN(x) ) //check whether x is not a number   检验该数是否是一个数

      (3)浮点数值采用二进制系统表示,无法精确表示分数1/10,就如十进制系统无法精确表示1/3。

           System.out.println(2.0-1.1) //将打印出0.8999999999999999,而不是0.9

           疑问:在Dev C++中为什么能打印出0.9?

           若不允许数值存在误差,应当使用BigDecimal类(可以操作任意长度任意精度的运算)。

      (4)浮点溢出问题:

           背景:Double类型使用64位存储数值,有些处理器使用80位浮点寄存器,这些寄存器为计算的中间结果增加了精度。

           默认计算:中间结果存储在80位寄存器中,将最后的结果截断为64位。

           严格计算:所有的中间计算都必须进行截断为64位。使用strictfp关键字修饰方法或类,可在类中或方法中强制执行严格计算。

           区别:严格计算时可能产生指数溢出,而正常默认计算不会。                    


4、Char型数据:

      (1)转义序列符\u可以出现在字符常量或字符串的引号之外(其他转义序列不可以)

           如:publix static void ( String\u005B\u005D args ) // is true

      (2)强烈建议不要再程序中使用char型数据


5、类型转换:

      合法转换:

                         

      默认转换:按Double > Float > Long > Int 的优先级进行默认转换。


6、字符串:

      (1)String类中没有改变已有字符串中某个字符的方法。(大部分情况,使用String类对字符串进行比较,使用StringBuffer类对字符串进行拼接和修改)

      (2)测试两字符串是否相等:

           - 建议使用 Object.equals(x) 方法

           -使用==时,它只能判定两个串是否储存在同一个位置。虚拟机会把相同的串设为共享,事实上只有字符串常量会被共享,而+或substring等操作产生的结果并不共享。

             例:String greeting="hello";

                     if (greeting=="hello") ... // 可能对

                     if (greeting.substring(0,4)=="hell") ... // 可能错

      (3)常用String类的方法:

           - char charAT(int index) //返回指定位置的字符

           - int compareTo(String other) // 若依照字典顺序,字符串在other前面,返回负值;在other后面,返回正值;若相等,返回0

           - boolean endWith(String suffix) // 若字符串以suffix结尾,返回true

           - String startsWith(String prefix) // 若字符串以prefix开头,返回true

           - boolean equals(Object other) // 若字符串与other相同,返回true

           - boolean equalsIgnoreCase(String other) // 若字符串与other除大小写外都相同,返回true

           - int indexOf(String str) // 从0位置开始搜索字符串中是否有与str相同的字符,有则返回相匹配的第一个字符的位置

           - int indexOf(String str,int index) // 从index位置开始搜索字符串中是否有与str相同的字符,有则返回相匹配的第一个字符的位置

           - int lastIndexOf(String str) // 从0位置开始搜索字符串中是否有与str相同的字符,有则返回相匹配的最后一个字符的位置

           - int lastIndexOf(String str,int index) // 从index位置开始搜索字符串中是否有与str相同的字符,有则返回相匹配的最后一个字符的位置

           - int length() // 返回字符串长度

           - String replace(char old,char new) // 返回用new代替字符串中所有old的字符后的字符串

           - String subString(int begin) // 返回由从begin位置到最末的新字符串

           - String subString(int begin,int end) // 返回由从begin位置到end位置的新字符串

           - String toLowerCase() // 返回将字符串中所有大写字符转换成小写字符后的新字符串

          - String toUpperCase() // 返回将字符串中所有小写字符转换成大写字符后的新字符串

          - String trim() // 返回将去掉开头和结尾的空格的新字符串


7、数组:

      (1)长度为0的数组是合法的。但与null不同。 

      (2)排序:Arrays.sort(a) 采用的是油画了的快速排序算法。

      (3)多维数组:Java只有一维数组,多维数组是数组的数组。由于数组各行可以被独立访问,我们可以对它进行交换。

          例:double[] temp=balance[i] ;

                  double[i]=balance[i+1] ;

                  double[i+1]=temp ;

      (4)常用函数:

           - static void arraycopy(Object from,int fromIndex,Object to,int toIndex,int count) // 向from数组拷贝从fromIndex到toIndex的元素到to数组

           - static void sort(Type[] a) // 对a数组进行快速排序

           - static int binarySearch(Type[] a,Type v) // 利用二分法查找数值v,若找到,返回其下标;否则返回负值r,-r-1是在保持数组有序时应插入v的位置

           - static void fill(Type[] a,Type x) // 将数组a中所有元素都赋值为v

           - static boolean equals(Type[] a,Object other) // 若other与a的类型、长度、所有元素都相等,返回true


8、变量与常量:

      (1)与C/C++不同,在JAVA中没有与与定义相分离的声明。

           疑问:那么 int i 可以认为是 int i=0 的定义?

      (2)Java中存在const关键字,只不过目前为被定义。定义常量需使用final。


9、Math函数:

      幂函数:Math.pow(x,a) // 表示 x 的a次幂,两个参数和返回值都是Double型

      指数函数:Math.exp(x) // 表示e的 x 次方,参数和返回值都是Double型

      自然对数:Math.log(x) // 表示 x 的对数,参数和返回值都是Double型

      正切函数:Math.atan(x) // x 用来表示一个直线斜率,存在周期性,但只返回一个值

                          Math.atan2(x,y) // 表示回(x,y)到(0,0)直线斜率

      四舍五入:Math.round(x) // 返回long型数据


10、运算符:

       (1)与C/C++不同,JAVA不使用逗号运算符。不过可以在for语句中使用逗号分隔表达式列表。

            疑问:在eclipse试过了,使用逗号分隔表达式会报错,什么情况?


11、块作用域:

         在C/C++中,可以在潜逃块中定义一个变量,内部变量会覆盖外部变量;JAVA不允许。

         例:public static void main(String[] args) { int n;   { int n;}  } // is not correct


12、For循环:

         (1)良好代码不成文规则:for语句中三个部分(初始化,测试,更新)应对同一变量进行操作。

         (2)在for循环中谨慎使用浮点数是否相等的测试。

               例:for(double x=0;x!=10;x+=0.1) // never end 因为0.1没有准确的二进制表示,x将从0.99……98跳到10.099……98。

         (3)使用标签跳出多重循环,类似于goto。标签合一用于任何语句。

              例:label:

                      { 

                         … 

                         if(condition) break label;// 跳出label块 

                          …

                        }//break后跳到此处





0 0