您的位置:首页 > 编程语言 > Java开发

java核心技术 卷一 第2-3章 安装java开发工具箱和 java的基本程序设计结构

2015-08-18 21:47 477 查看
2015 6 26 java核心技术 卷一 第2-3章 安装java开发工具箱和 java的基本程序设计结构第二章 安装java开发工具箱1.jar xvf../scr.zip中的那个xvf是什么意思?-c创建新的归档文件
-t  列出归档目录
-x  解压缩已归档的指定(或所有)文件
-u  更新现有的归档文件
-v 在标准输出中生成详细输出
-f  指定归档文件名
-m  包含指定清单文件中的清单信息
-e  为捆绑到可执行 jar 文件的独立应用程序
指定应用程序入口点
-0  仅存储;不使用任何 ZIP 压缩
-M  不创建条目的清单文件
-i  为指定的 jar 文件生成索引信息
-C  更改为指定的目录并包含其中的文件
2.使用集成开发环境
1)如果要创建一个已有的工程。
2)eclipse的错误消息,通常eclipse报错会伴有一个灯泡状的图标,点击这个图标可以得到一个建议解决这个错误的方案列表。
第三章 java的基本程序设计结构
public :称为访问修饰符,用于控制程序的其他部分对这段代码的访问级别。
class :表明java程序中的全部内容都包含在类中。这里,只需要将类作为一个加载程序逻辑的容器,程序的逻辑定义了应用程序的行为。
类名的标准命名规范:类名是以大写字母开头的单词。如果名字由多个单词组成,每个单词的第一个字母都应该大写。
源代码的文件名必须与公共类的名字相同。并用.java作为扩展名。
如果已经正确的命名了这个文件,并且源代码中没有任何录入错误,在编译这段源代码之后就会得到一个包含这个类字节码的文件,并于源文件存储在同一个目录下。
当使用 java ClassName运行编译程序时,Java虚拟机将从指定类中的main方法开始执行,因此为了代码能够执行,在类的源文件中必须包含一个main方法。当然也可以将用户自定义的方法添加到类中,并且在main方法中调用他们。
根据Java语言规范,main方法必须声名为public。
使用了System.out对象并调用了它的println方法。注意点号(.)用于调用方法。Java使用的通用语法是object.method(parameters)
在这个例子中,调用println方法并传递给它一个字符串参数。这个方法将传递给它的字符串参数显示在控制台上。java与C、C++一样,都使用双引号分隔字符串。
java中的注释不会出现在可执行程序中。/**/注释不能嵌套。也就是说,如果代码本身包含了一个*/,就不能用/**/将注释括起来。
Java是一种强类型语言。每一个变量必须声名为一种类型。在Java中一共有8种基本类型,其中4种整型、2种浮点类型、1种表示Unicode编码的字符单元的字符类型char和1种用于表示真值的boolean类型。
Java有一个能够表示任意精度的算术包,通常称为大数值。
//java7开始,在数字量下加_,更易读,编译器会自动去除      System.out.println(1_000_000);      //java7开始,加上前缀0b可以写二进制数      System.out.println(0b1001);       //1100 1010 1111 1110 = 2-15 + 2-14 + 2-11 + 2-9 + 254 =32768+16384+2048+512+254      //=51966      System.out.println(0xCAFE);
System.out.println(Double.POSITIVE_INFINITY);      System.out.println(Double.NEGATIVE_INFINITY);      System.out.println(Double.NaN);
float类型的数值有一个后缀F(3.14F)。没有后缀的浮点数值默认为double类型。
三个特殊的浮点数值:正无穷大,负无穷大,NaN(不是一个数字)。
#注意
1.不能这样测定一个特定值是否等于Double.NaN:if(x==Double.NaN) //is never true所有“非数值”都认为是不相同的。然而可以使用Double.isNaN方法:if(Double.isNaN(x)) //检测 x 是否是一个非数值
!警告
1.浮点数值不适用于禁止舍入误差的金融计算中。例如,命令System.out.println(2.0-1.1)将打印出0.8999999999999999而不是人们想象的0.9。其主要原因是数值采用二进制的系统表示,而在二进制中无法精确的表示数值1/10。如果需要在数值计算中不含有舍入误差,就应该使用BigDecimal类。
Unicode编码单元可以表示十六进制值,其范围从\u0000到\uffff。例如:\u2122表示注册符号(TM) ,\u03c0表示希腊字母π。除了转义序列符\u表示Unicode代码单元的编码之外,还有一些用于表示特殊字符的转义序列符。所有这些转义序列符都可以出现在字符常量或字符串的引号内。转义序列符\u还可以出现在字符常量或字符串的引号之外。在Java中char 类型采用UTF-16编码描述一个代码单元。强烈建议不要使用char类型,除非确实需要对UTF-16代码单元进行操作。最好将需要处理的字符串用抽象数据类型表示。
boolean有两个值true和false,用来判定逻辑条件。整型值和布尔值之间不能进行相互转换。在C或C++中,值0相当于false,非0相当于true。在Java中则不是这样。if(x=0)将不能通过编译,因为整数表达式x=0不能转换为布尔值。
逐一声明每一个变量可以提高程序的可读性。变量名对大小写敏感。
两种命名方式Box box;还有些程序员更加喜欢在变量名前加上前缀“a”。
声明一个变量后,必须用赋值语句对变量进行显示初始化,千万不要使用未被初始化的变量。
也可以将变量的声明和初始化放在同一行中。例如int a = 12;
在Java中,变量的声明尽可能地靠近变量第一次使用的地方。这是一种良好的程序编写风格。
在Java中,不区分变量的声明和定义。Java中,利用关键字final表示常量。关键字final表示这个变量只能被赋值一次。一旦被赋值后,就不能在更改了。如果希望某个常量可以在一个类的多个方法中使用,通常将这些常量称为类常量。可以使用关键字staticfinal设置一个类常量。作为类的一个field来存在。整数被0除将会产生一个异常,而浮点数被0除将会得到无穷大或NaN结果。自增运算符和自减运算符改变的是变量的值,所以。4++就是一条非法的语句。int m=7;int n=7;int a = 2 * ++m;//now a is 16,m is 8int b = 2 * n++;//now b is 14,n is 8&&和||是按照短路的方式来求值的。如果第一个操作数能确定表达式的值,第二个操作数就不必计算了。例如,表达式x != 0&&1/x>x+y //no division by 0当x为0时,不会计算第二部分。1/x不会被计算,也不会出现除以0的错误。位运算例:如果n是一个整型变脸,求用2进制表示的n的第i位是0还是1.println方法和sqrt方法存在微小的差异。println方法操作一个定义在System类中的System.out对象。但是Math类中的sqrt方法处理的不是对象,这样的方法被称为静态方法。如果不想在数学方法名和常量名前添加前缀“Math.”,只要在源文件的顶部加上下面这行代码就可以了。这称之为静态导入。import static java.lang.Math.*;自动类型转换的规则:当进行一个二元操作时,先要将两个操作数转换为同一种类型,然后再进行计算。-如果两个操作数中有一个是double类型,另一个操作数就会转换为double类型。-否则,如果其中一个操作数是float类型,另一个操作数就会转换为float类型。-否则,如果其中一个操作数是long类型,另一个操作数就会转换为long类型。-否则,两个操作数都被转换为int类型。强制类型转换通过截断小数部分将浮点值转换为整型。如果想对浮点数进行舍入运算,以便得到最接近的证书,那就需要使用Math.round方法。double x = 9.997;int nx = (int)Math.round(x);现在变量nx的值为10。当调用round的时候,仍然需要使用强制类型转换(int)。其原因是round方法返回的结果为long类型。!警告如果一个类型强制转换为另一种类型,而又超出了目标类型的表示范围,结果就会截断成一个完全不同的值。从概念上讲,Java字符串就是Unicode字符序列。子串:String类的substring方法的第二个参数是 不想 复制的第一个位置。substring的工作方式的一个优点是,容易计算子串长度b-a。拼接:Java语言允许使用“+”连接两个字符串,当将一个字符串与一个非字符串进行拼接时,后者被转换成字符串。字符串不可变:String类中没有提供用于 修改 字符串的方法。String greeting = “Hello”,如果希望将greeting的内容修改为“Help!”,不能直接将greeting的最后两个位置的字符修改为“p”,“!”。该怎样修改呢?首先提取需要的字符,然后再拼接上替换的字符串:greeting = greeting.substring(0,3)+"p!";这条语句将greeting的当前值修改为“Help!”由于不能修改Java字符串中的字符,所以在Java文档中将String类对象称为不可变字符串,如同数字3永远是数字3一样,字符串“Hello”永远包含H、e、l、l、和o的代码单元序列,而不能修改其中的任意一个字符。当然,可以修改字符串变量greeting,让它引用另外一个字符串。这就如同可以将存放3的数值变量改为存放4一样。检测字符串是否相等:使用equals方法检测两个字符串是否相等。s.equals(t)。s和t既可以是字符串变量又可以是字符串常量。如果要检测两个字符串是否相等,而不区分大小写,可以使用equalsIgnoreCase方法。一定不能使用==运算符检测两个字符串是否相等!这个运算符只能确定两个字符串是否放置在同一个位置上。当然,如果字符串放置在同一个位置上,他们必然相等。但是完全有可能将内容相同的字符串的拷贝放在不同的位置上。空串和NULL串:空串有自己的串长度(0),串内容(空)。不过String变量还可以存放一个特殊的值,名为null,表示目前没有任何对象与该变量关联。检查一个字符串是否为空if(str.length()==0)或if(str.equals(""))。检查一个字符串是否为null,要使用if(str==null).有时要检查一个字符串既不是null也不是空串,这时用if(str!=null && str.length() != 0)。注意要先检查str不为null。构建字符串:如果需要用较短的字符串构建字符串,每次采用字符串连接的方式(“+”),都会构建一个新的String对象。既耗时,又浪费时间。如果需要用许多小段的字符串构建一个字符串,那么应该按下列步骤进行。1)首先构建一个空的字符串构建器:StringBuilder builder = new StringBuilder();2)当每次需要添加一部分内容时,就调用append方法。builder.append(ch);builer.append(str);3)在需要构建字符串时就调用toString放法,将可以得到一个String对象,其中包含了构建器的字符序列。String completedString = builder.toString();(jdk5.0时引入了StringBuilder类。这个类的前身是StringBuiler类。这个类的前身是StringBuffer,其效率稍有些低,但允许采用多线程的方式执行添加和删除操作。如果所有字符串在一个单线程中编辑,则应该用StringBuilder类替代他。)输入输出:针对控制台的。输出:System.out.println输入:首先需要构造一个Scanner对象,并与“标准输入流对象”System.in关联。Scanner in = new Scanner(System.in);格式化输出:沿用C语言中的printf函数。%d,%x,%o,%s。%称为格式说明符,后面的字母称为转换符。日期和时间的格式化选项。使用以t开始任意字母结束的的两个字母格式。System.out.printf("%1$s %2$tB %2$te,%2$tY","Due date:",new Date());%之后数字为参数索引,必须紧跟在%后面并以$中止。可以使用静态的String.format方法创建一个格式化的字符串,而不打印输出。String message = String.format(“Hello,%s.Next year ,you'll be %d”,name,age);文件的输入与输出import java.io.FileNotFoundException;import java.io.IOException;import java.io.PrintWriter;import java.nio.file.Paths;import java.util.Scanner;public class Welcome4 {public static void main(String[] args) {Scanner in;String str1="";String str2="";String str3="";String str4="";try {in = new Scanner(Paths.get("D:\\学习资料\\abc.txt"));//用此方法对文件进行读取str1 = in.nextLine();str2 = in.next();str3 = in.next();str4 = in.next();System.out.println(str1);System.out.println(str2);System.out.println(str3);System.out.println(str4);} catch (IOException e) {e.printStackTrace();}try {PrintWriter out = new PrintWriter("D:\\学习资料\\def.txt");out.write(str1);out.println();out.write(str2);out.println();out.write(str3);out.println();out.write(str4);out.println();out.append("输入完毕,就是这样!");System.out.println("输出成功!");out.close();} catch (FileNotFoundException e) {e.printStackTrace();}}}当指定一个相对文件名时,文件位于Java虚拟机启动路径的相对位置。如果觉得定位文件比较烦恼,则可以考虑使用绝对路径。如"D:\\学习资料\\def.txt"控制流程当需要对某个表达式的值进行多个检测时可以使用switch。块作用域:不能在嵌套的两个块中声明相同的变量。java中有条不成文的规定,for语句的3个部分应该对同一个计数器变量进行初始化、检测、和更新。多重选择switch语句例如:建立一个包含4个选项的菜单系统Scanner in = new Scanner(System.in);System.out.println("Select an option(1,2,3,4)");int choice = in.nextInt();switch(choice){case 1:break;case 2:break;case 3:break;case 4:break;default://bad inputbreak;}如果将continue语句用于for循环中,就可以跳到for循环更新部分。例如for(count =1;count<=100;count++){System.out.println(Enter a number,-1 to quit:);n = in.nextInt();if(n<0) continue;sum += n;//not executed if n <0}大数值如果基本的整数和浮点数精度不能够满足需求,那么可以使用java.math包中的两个很有用的类:BigInteger和BigDecimal。可以处理包含任意长度数字序列的数值。前者实现了任意精度的整数运算,后者实现了任意精度的浮点数运算。使用静态的valueOf方法可以将普通的数值转换为大数值:BigInteger a = BigInteger.valueOf(100);如果要实现人们熟悉的算术运算,需要使用大数值类的add和multiply方法,BigInteger c = a.add(b);//c = a+b;BigInteger d = c.multiply(b.add(BigInteger .valueOf(2)));//d = c * (b+2);数组使用数组,首先要声明数组int []a;这条语句只声明了变量a,并没有将a初始化为一个真正的数组。应该使用new关键字创建数组。int []a = new int[100]。//数组长度可以不为常量创建一个int数组时,所有元素自动都初始化为0。boolean数组时的元素都自动初始化为false。对象数组的元素则初始化为一个特殊值null。一旦创建了数组,就不能改变数组的大小。如果经常需要在运行过程中扩展数组的大小,就应该使用另一种数据结构--数组列表array list。要打印数组中的所有值,可以用Arrays类中的toString方法。 System.out.println(Arrays.toString(a));创建数组对象同时赋予初值的简化写法。在使用这种语句时,不需要调用new。int[] a={2,3,5,7,11,13}。注意:Java允许数组的长度为0.在编写一个结果为数组的方法时。如果碰巧结果为空,则这种语法形式非常有用。在Java中,允许将一个数组变量拷贝给另一个数组变量。这时,两个变量将引用同一个数组。int[] luckyNumbers = smallPrimes;luckyNumbers[5] = 12; //now smallPrimes[5] is also 12数组拷贝:如果希望将一个数组的所有值拷贝到一个新的数组中去。就要使用Arrays类的copyTo方法。int[] copiedLuckyNumbers = Arrays.copyOf(luckyNumbers, luckyNumbers.length);如果要将数组的大小扩充为原来的2倍。可以这样luckynumbers = Arrays.copyOf(luckyNumbers,2* luckyNumbers.length);命令行参数每一个Java应用程序都有一个带String args[]参数的main方法。这个参数表明main方法接收一个字符串数组,也就是命令行参数。运行结果:数组的排序可以使用Arrays类的sort方法,这个方法使用了优化的快速排序算法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: