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++基本类似, 没有什么可以说的。

看到数组,突然想到, 数据结构其实和房间里的柜子类似, 都有两个功能:放东西, 取东西。 设计数据结构时,就想设计家具一样, 存/取物品都要尽可能便捷。这里面就有很多东西了, 分类,排序,索引等等

 

 

总结:

Core Java Volume I 读书笔记--第3章 Java的基本程序设计结构