第三章 java基本的程序设计结构

来源:互联网 发布:ubuntu 任务栏不见 编辑:程序博客网 时间:2024/03/29 04:15

java是大小写敏感的。

注释:

  //:当行注释

  /*

    多行注释

  */

java中定义类名的规则:

   名字必须以字母开头,后面可以跟字母和数字的任意组合。长度基本上没有限制。但是不能使用Java保留字。

标准的命名规范为:

  类名是以大写字母开头的名词。如果名字由多个单词组成,每个单词的第一个字母都应该大写。


源代码的文件名必须与公有类的名字相同,并用.java作为扩展名。


数据类型:

    Java是一种强类型语言。这就意味着必须为每一个变量声明一种类型。

    Java中,一共有8种基本类型。其中4种整型、2种浮点类型、1种用于表示Unicode编码的字符单元的字符类型char和1种用于表示真值得boolean类型。


长整型数值有一个后缀L。十六进制数值有一个前缀0x。八进制有一个前缀0。


float类型很少使用。float类型的数值有一个后缀F。没有后缀默认为double类型。

在十六进制表示法中,使用p表示指数而不是e。

十六进制中,指数采用十进制。指数的基数是2,而不是10。

Double.POSITIVE_INFINITY、Double.NEGATIVE_INFINITY和Double.NaN.


不能这样检测一个特定值是否等于Double.NaN: if(x == Double.NaN); 所有非数值的值都认为是不相同的。然而,可以使用Double.isNaN方法。


如果需要在数值计算中不含有任何舍入误差,就应该使用BigDecimal类。


转义序列符都可以出现在字符常量或字符串的引号内。转义序列符\u还可以出现在字符常量或字符串引号之外(而其他所有转义序列不可以)。


在Unicode标准中,代码点采用十六进制书写,并加上前缀U+,例如U+0041就是字母A的代码点。Unicode的代码点可以分成17个代码级别。第一个代码级别称为基本的多语言级别,代码点从U+0000到U+FFFF,其中包括了经典的Unicode代码;其余的16个附加级别,代码点从U+10000到U+10FFFF,其中包括了一些辅助字符。


UTF-16编码采用不同长度的编码表示所有Unicode代码点。在基本的多语言级别中,每个字符用16位表示,通常称为代码单元;而辅助字符采用一对连续的代码单元进行编码。这样构成的编码值一定落入基本的多语言级别中空闲的2048字节内,通常称为替代区域。[U+D800--U+DBFF用于第一个代码单元,U+DC00--U+DFFF用于第二个代码单元]

java中char类型用UTF-16编码描述一个代码单元。

强烈建议不要在程序中使用char类型,除非确实需要对UTF-16代码单元进行操作。


使用Character类的isJavaIdentifierStart和isJavaIdentifierPart方法进行检测。


声明一个变量之后,必须用赋值语句对变量进行显示初始化。


在Java中,不区分变量的声明与定义。


java中利用关键字final声明常量。习惯上,常量名使用大写。

java中,经常希望某个常量可以在一个类中的多个方法中使用,通常将这些常量称为类常量。可以使用关键字static final设置一个类常量。


整数被0除将会产生一个异常,而浮点数被0除将会得到无穷大或NaN结果。


一般,中间结果允许使用扩展的指数,但不允许使用扩展的尾数。使用strictfp关键字标记的方法必须使用严格的浮点计算来产生理想的结果。


常用的三角函数

  Math.sin

  Math.cos

  Math.tan

  Math.atan

  Math.atan2

  Math.exp

  Math.log

  Math.PI

  Math.E



实心箭头表示无信息丢失的转换;虚线表示有可能造成精度损失的转换。


枚举类型变量只能存储这个类型声明中给定的某个枚举值,或者null值。null表示这个变量没有设置任何值。


字符串:

  子串:substring

  拼接:+

  将一个字符串与一个非字符串的值进行拼接时,后者被转换成字符串。任何一个Java对象都可以转换成字符串。

  java字符串为不可变字符串。

  检测字符串是否相等:equals方法,equalsIgnoreCase方法。

  ==判断两个字符串是否放置在同一个位置上。如果在同一位置上,它们必然相等。

  compareTo与c中strcmp完全类似。

  Java字符串由char序列组成。

  length方法将返回采用UTF-16编码表示的给定字符串所需要的代码单元数量。要想得到实际的长度,即代码点数量,可以调用

    String类的codePointCount方法。

  调用s.charAt(n)方法返回位置n的代码单元,n介于0--s.length()-1之间。

   要想得到第i个代码点,调用offsetByCodePoints和codePointAt方法。



构建字符串:

   使用StringBuilder类。步骤如下:

      首先构建一个空的字符串构建器:StringBuiler builer = new StringBuilder();

      每次需要添加一部分内容时,就调用appendfangfa。

      builder.append(ch);   builder.append(str);

      需要构建字符串时就调用toString方法,将可以得到一个String对象。

       String completedString = builder.toString();





输入输出:

   读取输入:首先需要构造一个Scanner对象,并与“标准输入流”System.in关联。Scanner定义在java.util包中。

        Scanner in = new Scanner(System.in);

        现在就可以使用Scanner类的各种方法实现输入操作了。

        System.out.print("What is your name? ");

        String name = in.nextLine();

        使用nextLine方法是因为在输入行中可能包含空格。要想读取一个单词,就调用String firstName = in.next();

        要想读取一个整数,就调用nextInt方法。

        读取一个浮点数,调用nextDouble方法。

        因为输入是可见的,所以Scanner类不适用于从控制台读取密码。Java SE 6特别引入了Console类实现这个目的。要想读取密码,可以采用下列代码:

          Console cons = System.console();

          String username = cons.readLine("User name: ");

         char[] passwd = cons.readPassword("Password: ");

        Console对象处理输入不如采用Scanner方便。每次只能读取一行输入,而没有能够读取一个单词或一个数值的方法。




格式化输出:

     



参数索引值从1开始,而不是从0开始,%1$...对第1个参数格式化。


文件输入与输出:

    Scanner in = new Scanner(new File("myfile.txt"));

    PrintWriter out = new PrintWriter("myfile.txt");

    如果文件不存在,则可以像输出到System.out一样使用print、println、以及printf命令。



控制流程:

      不向c/c++,java不能在嵌套的两个块中声明同名的变量。

     case标签必须是整数或枚举常量,不能测试字符串。当在switch语句中使用枚举常量时,不必在每个标签中指明枚举名,可以由switch表达式值确定。


     java中提供了一种带标签的break语句,用于跳出多重嵌套的循环语句。

     标签必须放在希望跳出的最外层循环之前,并且必须紧跟一个冒号。事实上,可以将标签应用到任何语句中。并且只能跳出语句块,而不能跳入语句块。continue与break类似。

     BigInteger和BigDecimal,这两个类可以处理包含任意长度数字序列的数值。前者实现任意精度的整数运算,后者实现任意精度的浮点数运算。

     使用静态的valueOf方法可以将普通的数值转换为大数值。BigInteger a = BigInteger.valueOf(100);

     注意:不能使用人们熟悉的算术运算符(如:+、*)处理大数值。而需要使用大数值类中的add和multiply方法。java没有运算符重载功能。



在java中,允许数组长度为0, new elementType[0],注意,数组长度为0与null不同。