笔记 <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后跳到此处
- 笔记 <Core Java2 卷1>第三章 基本编程结构
- 笔记 <Core Java2 卷1>第二章 程序设计环境
- 笔记 <Core Java2 卷1>第四章 对象和类
- Java核心技术:卷1笔记[1] Java基本编程结构
- JAVA2核心技术第1卷 笔记 01
- JAVA2核心技术第1卷 笔记 02
- 《Java核心技术 卷I》笔记 第三章 Java的基本程序和设计结构
- 第七章 图形编程(《core java 卷1》学习笔记)
- 第三章 Java基本编程结构
- Java核心技术卷1 java的基本程序设计结构笔记
- 《JAVA2核心技术 卷一 基础知识(原书第七版)》《Core java2,Volume I-Fondamentsls Seven Edition》 学习笔记(一)
- 《JAVA2核心技术 卷一 基础知识(原书第七版)》《Core java2,Volume I-Fondamentsls Seven Edition》 学习笔记(二)BREAK和CONTINUE的区别
- 《JAVA2核心技术 卷一 基础知识(原书第七版)》《Core java2,Volume I-Fondamentsls Seven Edition》 学习笔记(三)对象的克隆
- 第五章 继承(core java 卷1学习笔记)
- 读书笔记(一)——《Java核心技术卷一》第三章Java的基本程序设计结构
- 读书笔记(二)——《Java核心技术卷一》第三章Java的基本程序设计结构
- JAVA2核心技术卷I:基础知识(原书第7版) -- 第3章. Java基本程序结构
- java2 实用教程 第三版 第三章 习题 1
- sql 横向求平均值(排除为0项)
- java中的异常
- 【Linux C】第四章 指针与字符串
- vsftpd在opensuse环境下建立ftp服务器
- Android内存(内存溢出 内存不足 内存低 .)优化详解
- 笔记 <Core Java2 卷1>第三章 基本编程结构
- java Xml 解析 Dom
- Android开发eclipse无法签名android程序包的问题
- tq210 按键驱动
- C++错误unresolved external symbol _WinMain@1
- 奇幻RPG(角色技能 与 Strategy模式)
- 异步调用与线程(总结篇)
- android自定义滑动开关控件,适合所有的android系统
- AO与AE的区别(转载)