Java技术核心卷I学习笔记——基本的程序设计结构

来源:互联网 发布:网页三剑客过时了 知乎 编辑:程序博客网 时间:2024/06/08 07:36

——数据类型

Java对大小写敏感

类名必须以字母开头,后面跟字母和数字随意组合。标准命名规范,类名是以大写字母开头的名词

4种整型:
int 4字节
short 2字节
long 8字节
byte 1字节

2 种浮点类型:
float 4字节
double 8字节

char类型
在Java中,char类型用UTF-16编码描述一个代码单元
建议不要在程序中使用char类型,除非确实需要对UTF-16代码单元进行操作

转义字符:
\b 退格
\t 制表
\n 换行
\r 回车
\” 双引号
\ 反斜杠

boolean类型
false 和 true, 用来判定逻辑条件
整型值和布尔值之间不能进行相互转换

在Java中,所有的数值类型所占的字节数量与平台无关

——变量

变量名必须是一个以字母开头的,然后由字母和数字构成的序列
可以在一行中声明多个变量
例如:

int i,j;

不过,不提倡使用这种风格。逐一声明变量可以提高程序的可读性

声明一个变量之后,必须用赋值语句对变量进行显式初始化。千万不要使用未被初始化的变量。
在Java中,变量的声明尽可能地靠近第一次使用的地方。这是一种良好的编程风格

C++中区分变量的声明和定义。
例如:int i = 10;
这是定义一个变量,而
extern int i;
这是声明一个变量。
在Java中,不区分变量的声明和定义。

——常量

关键字final声明常量,表示这个常量只能被赋值一次。一旦被赋值之后,就不能再更改了。
习惯上,常量名使用大写

可以使用关键字static final设置一个类常量。
例如:

public static final double CM_PER_INCH = 2.54;

需要注意,类常量的定义位于main方法的外部。因此,在同一个类中的其他方法也可以使用这个常量。而且,如果一个常量被声明为public,那么其他类的方法也可以使用这个常量。

——运算符

前缀式 ++n
先进行加1运算,再使用变量n

后缀式 n++
先使用变量n,再进行加1运算

建议不要在其他表达式的内部使用++

Java提供了两个用于表示π和e常量的近似值
Math.PI
Math.E
当然,这需要 import static java.lang.Math.*;

数值类型之间的转换

这里写图片描述

虚线是可能有精度丢失的转换

强制类型转换(cast)
如果试图将一个数值从一种类型强制转换为另一种类型,而又超出了目标类型的表示范围,结果就会被截断成一个完全不同的值。
例如,(byte)300 的实际值是44

还有运算符优先级,这个要清楚一下

——字符串

标准Java类库中提供了一个类String。每个用双引号引起来的字符串都是String类的一个实例。

String e = "";String greeting = "Hello";

子串 substring

String s = greeting.substring(0,3);

在substring中从0开始计算,直到3为止(从0到2)。但不包括3。

substring的优点:容易计算子串的长度。字符串substring(a,b)的长度为b-a。例如:greeting.substring(0,3)的长度为3-0 = 3。

拼接
Java中允许使用+号拼接两个字符
当将一个字符串和一个非字符串的值进行拼接时,后者会被传换成字符串
例如:

int age = 13String rating = "PG"+age;

rating得到“PG13”。
这种特性通常使用在输出语句中。
例如:

System.out.println("The answer is  " + answer);

单词is后面加一个空格,也会输出。

不可变字符串
String类没有提供用于修改字符串的方法。
但是,不可变字符串却有一个优点:编译器可以让字符串共享

可以想象将各种字符串存放在公共的存储池中。字符串变量指向存储池中相应的位置。如果复制了一个字符串变量,原始字符串与复制的字符串共享相同的字符。

检测字符串是否相等,可以使用equals方法
想要检测两个字符串是否相等,而不区分大小写,可以使用equalsIgnoreCase方法
注意,一定不能使用==运算符来检测两个字符串是否相等!!!!

这个==运算符只能够确定两个字符串是不是放在同一个位置上。当然,如果字符串放置在同一个位置上,那它们肯定相等啦。

如果虚拟机始终将相同的字符串共享,就可以使用==检测是否相等。但是!但是,实际上只有字符串常量是共享的!只有字符串常量!而+或者substring等操作产生的结果并不是共享的。

C++的stirng类重载了==运算符方便检测字符串内容的相等,但是Java没有采用这种方式。
Java也可以使用compareTo方法检测是否相等
例如:

if(greeting.compareTo(“Hello”) == 0)

不过,使用equals看起来更为清晰。
关于字符串的其他方法,就去查询API了。、

构建字符串
需要又较短的字符串构建字符串时,采用字符串连接的方式效率比较低。因为每次连接字符串,都会创建一个新的String对象,浪费空间和时间。

所以,应该使用StringBuilder类。
首先,构造一个新的字符串构造器:

StringBuilder builder = new StringBuilder();

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

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

在需要构建字符串时就调用toSting方法:

String completeString = builder.toString();

JDK5.0引入StringBuilder类,这个类的前身是StringBuffer,其效率略微有些低,但允许采用多线程的方式执行添加和删除字符的操作。如果所有字符串在一个单线程中编辑,则应该用StringBuiler代替它。

——格式化输出

Java SE 5.0沿用了C语言库函数中的printf方法。
例如:

System.out.printf("Hello,%s. Next year, you’ll be %d", name, age);

每一个以%字符开始的格式说明符都用相应的参数替换。

可以使用静态的String.format方法创建一个格式化的字符串,而不打印出来:

String message = String.format("Hello, %s. Next year, you’ll be %d", name, age);

常见的转换符:
%d 十进制整型
%f 定点浮点型
%s 字符串
还有好多好多。。。

——条件语句

for(int i = 1; i <= 10; i++);System.out.println(i);

与C++一样,尽管Java允许在for循环的各个部分放置任何表达式,但是for语句中的3个部分应该对同一个计数器变量进行初始化、检测和更新,提高可读性。

如果在for语句内部定义一个变量,则这个变量就不能在循环体外面使用。因此,如果希望在for循环之外使用循环计数器的最终值,这个变量就要在循环体外声明。

Java有一个与C/C++完全一样的switch语句。但是有可能触发多个case分支。如果在case分支语句的末尾没有break语句,那么就会接着执行下一个case分支。这种情况很危险,常常引发错误。所以,使用的时候要注意。

——大数值

java.math包中有两个可以出来包含任意长度数字序列数值的类:BigInteger和B**igDecimal**。

BigInteger类实现了任意精度的整数运算
BigDecimal类实现了任意精度的浮点数运算

使用静态的valueOf方法可以将普通的数值转换成大数值

BigInteger a = BigInteger.valueOf(100);

但是!不能使用+或*等平时熟悉的运算符,而需要使用大数值类中的add和mulitiply

BigInteger c = a.add(b);//  c = a + bBigInteger d = c.mulitiply(b.add(BigInteger.valueOf(2))); // d=c*(b+2) 

——数组

int[] a; 

只声明变量a,并没有将a初始化。应该使用new运算符创建数组:

int[] a = new int[100];

可以利用Arrays类的toString方法,简单地打印数组中的值出来。
例如:

int[] a = {2,3,5,7,11,13};System.out.println(Arrays.toString(a));

结果会显示为“[2,3,5,7,11,13]”

Java实际上没有多维数组,只有一维数组。多维数组被解释为”数组的数组”

0 0