1. java的基本程序设计结构

1.1. java命名规范 1

  • java是区分大小写的

  • 类的命名,使用驼峰式命名的规范;如``FirstSample``

  • 常量以全大写以及用下划线分割单词;如:public static final String GAME_COLOR=”RED”

  • 方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头。例如: sendMessgesend。方法

  • 变量名同方法名一样,第一个第一个单词应以小写字母作为开头,后面的单词则用大写字母开头 message,。

  • 包名一律小写,使用小写字母同时不要使用下划线将单词分开,如 com.xxx.settlment,不要 com.xxx.Settlement,也不要 com.xxx.settlement.jsf_util

备注

为了更好区分方法名以及变量名,同时在为变量和方法命名时最好取些有意义的名字,应尽量使用简短的英文单词。 较好的方法是:

  • 方法名以 动词+名词 为组合命名,如 initInformation

  • 变量以 冠词+名词/名词+名词 为组合,如 studentInformation, aInformation

警告

所有命名规则必须遵循以下规则:

  1. 名称只能由字母、数字、下划线、$符号组成

  2. 不能以数字开头

  3. 名称不能使用JAVA中的关键字

  4. 最好不要出现中文及拼音命名

1.2. 注释

在 Java 中,有 3 种标记注释的方式。

  • 最常用的方式是使用 // ,其注释内容从 // 开始到本行结尾。

  • 当需要长篇的注释时,既可以在每行的注释前面标记 //,也可以使用 /* 和 */ 将一段比较长的注释括起来。

  • 第 3 种注释可以用来自动地生成文档。这种注释以 /** 开始, 以 */ 结束。

1.3. 数据类型

Java 是一种强类型语言。这就意味着必须为每一个变量声明一种类型: 在Java 中,一共有 8 种基本类型( primitive type ), 其中有 4 种整型、2 种浮点类型、 1 种用于表示 Unicode 编码的字符单元的字符类型 char (请参见论述 char 类型的章节) 和 1 种用于表示真值的 boolean 类型。

类别

类型

存储需求

取值范围

整型

int

4 字节

-2 147 483 648 ~ 2 147 483 647 (正好超过 20 亿)

short

2 字节

-32 768 ~ 32 767

long

8字节

-9 223 372 036 854 775 B08 ~ 9 223 372 036 854 775 807

浮点数

float

4 字节

大约 ± 3.402 823 47E+38F (有效位数为 6 ~ 7 位)

double

8 宇节

大约 ± 1.797 693 134 862 315 70E+308 (有效位数为 15 位>

字符

char

2字节

备注

下面是用于表示溢出和出错情况的三个特殊的浮点数值:

  • 正无穷大

  • 负无穷大

  • NaN (不是一个数字)

注意

  • 不同于 C++, Java 没有任何无符号(unsigned) 形式的 int、 long、short 或 byte 类型。

  • Java 有一个能够表示任意精度的算术包, 通常称为“大数值”( big number。) 虽然被称为大数值,但它并不是一种新的 Java 类型,而是一个 Java 对象。

警告

1.4. 枚举类型

有时候,变量的取值只在一个有限的集合内。例如: 销售的服装或比萨饼只有小、中、大和超大这四种尺寸。当然, 可以将这些尺寸分别编码为 1、2、3、4 或 S、 M、 L、X。但这样存在着一定的隐患。在变量中很可能保存的是一个错误的值(如 0 或 m)。

针对这种情况, 可以自定义枚举类型。枚举类型包括有限个命名的值。

enum Size {SMALL,MEDIUM,LARGE,EXTRA_LARGE};

public class Test {
   public static void main(String[] args) {
      Size size=Size.SMALL;
      System.out.println(size);
   }
}

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

1.5. 字符串类型 --String类

Java 字符串大致类似于 char\ 指针*

String 类没有提供用于修改字符串的方法。由于不能修改 Java 字符串中的字符, 所以在 Java 文档中将 String 类对象称为不可变字符串。

不可变字符串有一个优点:编译器可以让字符串共享。可以想象将各种字符串存放在公共的存储池中。字符串变量指向存储池中相应的位置。如果复制一个字符串变量,原始字符串与复制的字符串共享相同的字符。这样做会不会产生内存遗漏呢? 毕竞, 原始字符串放置在堆中。十分幸运,Java 将自动地进行垃圾回收。 如果一块内存不再使用了, 系统最终会将其回收。

1.5.1. 字符串之间的比较

对于字符串,一定不要使用=运算符检测两个字符串是否相等! 这个运算符只能够确定两个字串是否放置在同一个位置上。可以使用 equals 方法检测两个字符串是否相等。如: s.equals(t)

1.5.2. 空字符串与null

空串 “” 是长度为 0 的字符串。空串是一个 Java 对象, 有自己的串长度( 0 ) 和内容(空)。不过, String 变量还可以存放一个特殊的值, 名为 null, 这表示目前没有任何对象与该变量关联。

有时要检查一个字符串既不是 null 也不为空串,首先要检查字符串是否为空。这种情况下就需要使用如下条件

if (str != null && str.length() != 0)

备注

了解java虚拟机的垃圾回收机制;了解String的字符串共享存储池机制。

1.6. 输入输出

1.6.1. 标准输入流

打印输出到“ 标准输出流”(即控制台窗口)是一件非常容易的事情,只要调用 System.out.println 即可。然而,读取“ 标准输人流” System.in 就没有那么简单了。要想通过控制台进行输人,首先需要构造一个 Scanner 对象,并与“ 标准输人流” System.in 关联。

import java.util.Scanner;

public class StringTest {
   public static void main(String[] args) {
      Scanner in=new Scanner(System.in);
      System.out.println("Please inter your name?");
      String name=in.nextLine();
      System.out.println("Hello, "+name);
   }
}

运行截图:

Please inter your name?
Eugene Forest
Hello, Eugene Forest

警告

读取输入操作在实际使用中基本不使用。了解更多与标准输入流相关请前往查看API文档 Scanner。

1.6.2. 格式化输出

在早期的 Java 版本中,格式化数值曾引起过一些争议。庆幸的是,Java SE 5.0 沿用了 C 语言库函数中的 printf方法。

转换符

类 型

举 例

d

十进制整数

159

f

定点浮点数

15.9

s

字符串

Hello

x

十六进制整数

9f

c

字符

H

o

八进制整数

237

b

布尔

True

h

散列码

42628b2

e

指数浮点数

1.59e+01

g

通用浮点数

a

十六进制浮点数

0xl.fccdp3

备注

在实际使用中,浮点数的标准输出流的格式化使用地比较多。

import java.util.Scanner;

public class StringTest {
   public static void main(String[] args) {
      Scanner in=new Scanner(System.in);
      System.out.println("Please inter your name:");
      String name=in.nextLine();
      System.out.println("Please inter your age:");
      Integer age=in.nextInt();
      System.out.printf("Your age is %d .\n", age);
      System.out.printf("If you live to 90 years, you have already spent %.2f persent of your life!",((float)age/90)*100);
   }
}
Please inter your name:
Eugene forest
Please inter your age:
22
Your age is 22 .
If you live to 90 years, you have already spent 24.44 persent of your life!

1.7. 数组

可以使用下面两种形式声明数组

int[] a;int a[];

大多数 Java 应用程序员喜欢使用第一种风格, 因为它将类型 int[] ( 整型数组)与变量名分开了。

创建一个数字数组时, 所有元素都初始化为 0。boolean 数组的元素会初始化为 false。对象数组的元素则初始化为一个特殊值 null, 这表示这些元素(还)未存放任何对象。

备注

对于对象数组类型的,在Java中一般使用集合来实现和使用。

1.7.1. for each 循环

int[] a={1,2,3,4};
for (int element : a)
   System.out.println(element);

for each 循环语句的循环变量将会遍历数组中的每个元素, 而不需要使用下标值。

1.7.2. 实例

import java.util.Arrays;

public class ArrayTest {

   public static void main(String[] args) {
      int[] a=new int[3];
      char[] message= {'E','u','g','e','n','e'};
      boolean[] flag=new boolean[2];
      String[] names=new String[2];
      for (boolean b : flag) {
         System.out.print(b);
      }
      System.out.println("\n*******");
      for (int i : a) {
         System.out.print(i);
      }
      System.out.println("\n********");
      for (char b : message) {
         System.out.print(b);
      }
      System.out.println("\n********");
      for (String string : names) {
         System.out.print(string);
      }
      System.out.println("\n********");
      System.out.println(Arrays.toString(message));

   }

}
falsefalse
*******
000
********
Eugene
********
nullnull

1.7.3. 数组拷贝

在 Java 中,允许将一个数组变量拷贝(赋值)给另一个数组变量。这时,两个变量将引用同一个数。

int[] a={1,2,3,4}; int[] b=a;

如果希望将一个数组的所有值拷贝到一个新的数组中去,就要使用 Arrays 类的 copyOf 方法:

Arrays.copyOf(int[] original, int newLength)

拷贝后的数组长度可以大于源数组(即newLength > original.length),多余的未被赋值的部分自动数组初始化,即如果数组元素是数值型,那么多余的元素将被赋值为 0 ; 如果数组元素是布尔型,则将赋值为 false。相反,如果长度小于原始数组的长度,则只拷贝最前面的数据元素。

import java.util.Arrays;

public class CopyArrayTest {

   public static void main(String[] args) {
      int[] a={1,2,3,4};
      int[] b=a;
      int[] c=Arrays.copyOf(a, a.length);
      a[0]=127;
      System.out.println(Arrays.toString(a));
      System.out.println("**********");
      System.out.println(Arrays.toString(b));
      System.out.println("**********");
      System.out.println(Arrays.toString(c));
   }

}
[127, 2, 3, 4]
**********
[127, 2, 3, 4]
**********
[1, 2, 3, 4]

1

虽然java的命名规范是宽松的,但是作为一个程序员要有良好的编程命名规范。