Core Java Volume I 读书笔记--第3章 Java的基本程序设计结构
3.1 Hello World 入门
public class FirstSample {
publicstatic void main(String[] args){
System.out.println("we will not use 'Hello world!'");
}
}
HELLO WORLD 是各个语言约定成俗的入门第一个程序。
Hello World 最早广为人只是在 The C Programming Language 一书中, 从1974年贝尔实验室内部手册Programming in C.A Tutorail继承而来:
#include <stdio.h>
main( )
{
printf("hello, world\n");
}
Hello World 最早在程序中出现是 在1972年 的 A TutorialIntroduction to the language B :
main(){
extrn a,b,c;
putchar(a); putchar(b); putchar(c); putchar('!*n');
}
a 'hell';
b 'o, w';
c 'orld';
参考维基百科上Hello World的内容
3.2 注释
和C/C++一样的注释语法 // 和 /* */
除此之外,java doc 新增了一种注释语法/** */
注释是一种非常常见,简单的特性, 本质上是正式表达的一种补充。 所以书籍有注释,Word 文档有注释, 各种各样的编程语言也有注释。 编程语言中的注释是一种符号,标记, 编译器或者解释器会忽略标记中的内容。 注释这个语言特性是各个语言特性里面最容易学的了。
3.3 数据类型
Java 有8中基本类型:
整型: int(4字节),short(2字节),long(8字节),byte(1字节)
浮点型: float(4字节) , double(8 字节)
Boolean 型:true/false
Char型
整型和浮点型用于数值计算, Boolean 用于逻辑计算。 从数学的角度来说, 一种语言有这3中类型数值计算就足够了, 无理数之类的用浮点数近似表示完全足够。直观来看, 浮点型对应数学中的实数,整型是实数的一部分, 没必要单独把整型拿出来。从程序设计角度来看, 整数全部用浮点类型存储空间效率太低了。JAVA有整型和浮点型,属于一种折中设计。 从数学角度来看, 一门编程语言应该支持数值计算和逻辑计算,所以浮点型,boolean类型是必要的。
CHAR 型用于表示人类文字(char表示字母,有了字母就有了单词, 就有了文字), 是文字的基本单位。 有了文字,就有了人机交互。
从基本类型就可以看出来, 计算机程序的两大功能就是计算和人机交互。
Java 相比C/C++没有无符号类型, 这一点简洁了很多。 无符号类型有点过度设计了。
3.4 变量
在java中, 每一个变量都属于一种类型(type):
double salary;
变量名必须是一个以字母开头的,由字母或数字构成的序列。Java 中的字母比其他程序设计语言范围要大, 包括’A’~’Z’, ‘a’~’z’, ‘_’ ,’$’或者在某种语言中代表字母的任何Unicode字符。
变量名大小写敏感。
变量需要使用赋值语句初始化后才能使用。
使用关键词final指示常量, final 表示变量只能被赋值一次, 一旦赋值之后不能修改。
变量应该也是从数学引进而来的概念, 要计算,就有变量。 变量是计算的原材料。 不过程序设计里面的变量和数学里面变量的概念还是有些不同。 在程序设计领域, 变量可以被赋值, 所以变量的值(内容)是可变的。
3.5 运算符
算术运算符:Java中使用+,-,*,/表示加,减,乘,除运算, 整数的求余(取模)用%表示
逻辑运算符: &&(逻辑与), ||(逻辑或), !(逻辑非)
程序设计领域扩充的运算符:
自增:++
自减:--
三元操作符:?
位运算符: &(按位与),|(按位或), ^(异或),~(非)
注意点:
逻辑运算&&和||是按照“短路”方式求值的;
自增自减有前置后置的区别, 前置表示先进行运行, 使用的是改变后的值; 后置使用的是变量原来的值, 然后才把变量改变;
运算符也属于数学中概念, 程序设计语言中从数学中继承了基础的算术运算和逻辑运算符, 同时也扩充了一些程序设计中独有的运算符。
有基本的数据类型, 变量, 运算符, 计算的基本元素都已具备。
Math 类中,包含了各种各样的数学函数:
Math.sqrt
Math.sin
Math.cos
Math.tan
等,
Math.PI 和Math.E用于表示 π 和e常量的近似值。
3.6 字符串
String greeting = “Hello”;
从概念上讲,Java 字符串就是Unicode字符序列.
Java 允许使用+号(拼接)两个字符串。当将一个字符串与一个非字符串的值进行拼接时,后者将被转换为字符串(任何一个Java对象都可以转换为字符串)。
String 类没有提供用于修改字符串的方法, 所以String 类对象为不可变字符串。不可变字符串有一个优点: 编译器可以让字符串共享。
可以使用equals 方法检测两个字符串是否相等。
s.equals(t) 或者 “hello”.equals(greeting)
千万不能使用== 来检测字符串相等。 == 比较的是变量是否引用的同一个位置,equals 比较的是两个字符串的内容。 存在一种情况字符串的内容相同,但不是同一位置的引用:字符串常量是共享的,而+或者subString等操作产生的结果不是共享的。
判断字符串是否为空:
If(str != null && str.length() != 0)
每次拼接字符串,都会构建一个新的String对象。有些时候需要由短的字符构建字符串,使用拼接方式即耗时又浪费空间。
使用StringBuilder。
相比StringBuffer,StringBuilder 是线程不安全的,但单线程操作时效率高。
C/C++ 使用ANSI定义字符, C++ 使用的是ANSI 定义的字符串, Java 字符和字符串都是基于Unicode 的, 使用起来更方便。
字符串就是人机交互时的句子,计算机的世界里不需要字符串, 字符串是给人看的。
3.7 输入输出
打印到标准输出流:
System.out.println()
读取标准输入流:
Scanner in = new Scanner(System.in);
String name = in.nexLine();
String firstName = in.next();
int age = in.nextInt();
可以使用和C语言库函数类似的prinf方法来格式化输出,用法和C语言一样:
System.out.print(“Hello , %s. Next Year, you will be %d”,name, age);
读取文件, 需要用File对象构造一个Scanner对象:
Scanner in = new Scanner(Paths.get(“myfile.txt”));
写入文件,需要构造一个PrintWriter对象:
PtintWriter out = newPrintWriter(“myfile.txt”);
如果文件不存在,会创建该文件。 可以像输出到System.out一样使用print,println以及printf命令。
字符串和输出输出构成完成的人机交互系统。
3.8 控制流程
和C++ 一样,Java有顺序,分支, 循环结构。 没有goto 语句(对比C 语言),但break 语句可以带标签。
在Java 中不能再嵌套的两个块中声明同名的变量。(C++中内层定义的变量会覆盖掉外层定义的变量)
JAVA中多重选择的switch和C++稍有不同, case 标签可以使字符串字面量:
String input = …;
switch(input.toLowerCase())
{
case “yes”:
….
breakl
}
编程(Programming )本质上是一种规划活动, 控制流程类似图论中的路径规划。 基本上所有编程语言的这个特性都是差不多的。
3.9 大数值
如果基本的整数和浮点数精度不能满足要求, 可以使用java.math中的:BigInteger和BigDecimal.
使用静态的valueOf方法将普通数值转换为大数值:
BigInterger a = BigInterger.valueOf(100);
Java 相对C语言来说,确实对开发者更友好, 工具更齐全。 记得以前学校里编程培训专门有大数这样的题, C语言确实是比较麻烦, 不过可以了解具体实现, 有利有弊。
3.10 数组
数组和C/C++基本类似, 没有什么可以说的。
看到数组,突然想到, 数据结构其实和房间里的柜子类似, 都有两个功能:放东西, 取东西。 设计数据结构时,就想设计家具一样, 存/取物品都要尽可能便捷。这里面就有很多东西了, 分类,排序,索引等等
总结: