1.注释
//
/*  */ 不能嵌套,因为要注释的代码块中可能包含*/界定符
/**  */ 可以用来自动地生成文档(?不懂)

2.数据类型
Java是一种强类型语言。
8种基本数据类型:4种整型,2种浮点类型,1种字符类型char,1种表示真值的类型boolean。

2.1整型
用于表示整数(没有小数部分的数值),包括正整数和负整数——有符号数,如9,-19。
byte    1字节(8bit) -128~127                                          2^8=256。原码反码补码参照博客https://www.cnblogs.com/wkfvawl/p/10512739.html
short   2字节         -32768~32767                                      2^16=65536。65536/2=32768。 
int     4字节         -21,4748,3648~21,4748,3647(刚刚超过20亿            2^32=42,9496,7296  最常用,但如果要表示整个地球的人口这种,就需要用long了。
long    8字节                                                           2^64=1844,6744,0737,0955,1616
与C/C++不同,Java中,整型的范围与目标平台无关。无论是16位、32位还是64位处理器,4种整型的表示范围都是上面这样。
十六进制前缀0x或0X(如0xCAFE),八进制前缀0(如010,八进制易混淆),二进制前缀0b或0B。
长整型数值后面有一个后缀L或l,如4000000000L。
Java7之后,可以为数字加下划线使其更易读,Java编译器会自动去除这些下划线,不会影响程序运行。如1_000_000,0b1111_0100_0010_0100_0000。
注意:Java没有任何无符号形式(unsigned)的byte,short,int,long。

2.2浮点类型
浮点类型用于表示有小数部分的数值。
float    4字节    有效位数6~7位
double   8字节    有效位数15位
float类型的数值后缀为F或f,double类型的数值后缀为D或d,没有后缀的浮点数默认为double类型,如3.14。
三个特殊的浮点数值:正无穷大,负无穷大和NaN。分别用常量Double.POSITIVE_INFINITY,Double.NEGATIVE_INFINITY和Double.NaN表示。
一个正整数除以0的结果为正无穷大,负整数除以0的结果为负无穷大,0/0或负数的平方根的结果为NaN。判断一个数是不是NaN,不能用x==Double.NaN,而应该使用Double.isNaN(x)。因为非数值的值都认为是不相同的,
即使x是NaN,用第一种判断方法也会得出不相等的结果。

2.3字符类型
char  要用单引号括起来,如'A'
强烈建议不要在程序中使用char类型,除非确实需要处理UTF-16代码单元。

2.4boolean类型
布尔类型有两个值:true和false,不像C/C++那样,0相当于false,非0相当于true,Java中整型值和布尔值之间不能相互转换。

3.变量与常量
3.1声明变量
double salary;
int vacationDays;
long earthPopulation;
boolean done;
常用的变量命名:
Box box;
Box aBox;//"Box" is a type

3.2变量初始化
声明之后,使用赋值语句进行显式初始化。未初始化的变量的值不能使用。
int vacationDays;
vacationDays = 12;
也可以将声明和初始化放在同一行:
int vacationDays = 12;
变量的声明尽可能靠近变量第一次使用的地方,这是一种良好的编程习惯。
从Java10开始,如果可以从变量的初始值推断出变量的类型,就不再需要为变量声明类型。只需使用关键字var:
var vacationDays = 12;//vacationDays is an int
var greeting = "hello";//greeting is a string
Java不区分声明和定义,C/C++区分声明和定义。

3.3常量
在Java中,使用关键字final指示常量。常量意味着只能被赋值一次,一旦赋值,不可更改。常量名一般使用全大写。
final double CM_PER_INCH = 2.54;
如果希望某个常量可以在一个类的多个方法中使用,可以使用关键字static final设置一个类常量(class constant)。类常量的定义位于main方法的外部,也正因如此,同一个类的其他方法也可以使用这个常量。
如果希望在其他类的方法中使用这个常量,可以将其声明为public。
public class Constants
{
  public static final double CM_PER_INCH = 2.54;
  
  public static void main(String[] args)
  {
  }
}
const是Java的关键字,但是目前并没有使用,在Java中,必须使用final定义常量。

3.4枚举类型
有时候,变量的取值只在一个有限的集合内。如衣服尺码一般只有小、中、大和超大四种,可以将这些尺码编码为1、2、3、4。但是在使用时,变量中保存的可能是一个错误无意义的值,如0。
为了避免这种情况发生, 我们可以自定义枚举类型,将变量的取值限制在一个有限的集合内。如
enume Size { SMALL, MEDIUM, LARGE, EXTRE_LARGE };
之后,就可以声明Size类型的变量:
Size s = Size.MEDIUM;
Size类型的变量只能存储类型声明中给定的某个枚举值,或者是null,null表示这个变量没有设置任何值。

4.运算符
4.1算术运算符
+、-、*、/分别表示加减乘数。
%表示整数的求余操作(又叫取模)。
当参与/运算的两个操作数都是整数时,表示整数除法;否则,表示浮点除法。例如:
15/2等于7, 15%2等于1, 15.0/2等于7.5。
整数除以0,会产生一个异常;浮点数除以0,会得到无穷大或NaN。

4.2数学函数与常量
Math类中,包含了各种各样的数学函数。
平方根函数,sqrt:
double y = Math.sqrt(x);
幂函数,pow:
double y = Math.pow(x,a); //y = x^a
关于整数求余数的方法,floormod;  (?不懂)
三角函数:
Math.sin
Math.cos
Math.tan
Math.atan
Math.atan2
指数函数和对数函数:
Math.exp //exponent
Math.log
Math.log10
π和e常量的近似值:
Math.PI
Math.E
在实际使用时,不必在这些方法和常量面前添加“Math”前缀,只需在源文件顶部进行静态导入:
import static java.lang.Math.*;
Math类与StrictMath类的区别(?不懂)

4.3数值类型之间的转换 (自动、合法的转换)

4.4强制类型转换

强制类型转换的语法如下:

double x = 9.997;

int nx = (int) x; //强制类型转换通过截断小数部分将浮点数转换为整型,因此nx等于9

如果希望进行舍入运算,以求得最接近的整数,需要使用Math.round方法:

double x = 9.997;

int nx = (int) Math.round(x);//nx等于10

当调用round时,仍需要使用强制类型转换(int)。这是因为round的返回值是long类型的,由于从long到int存在信息丢失的可能,因此只有使用显式的强制类型转换才能将long类型转换为int类型。

4.5结合赋值和运算符

可以在赋值中使用二元运算符,例如:

x += 4;

等价于

x = x + 4;

4.6自增自减运算符

n++; ++n; n--; --n;

前缀和后缀形式的自增自减运算符,在表达式中使用时,会有一些区别,例如:

int m = 7;

int n = 7;

int a = 2 * ++m; // now a is 16, m is 8

int b = 2 * n++; // now b is 14, n is 8

建议不要在表达式中使用++,因为这样很容易让人困惑,而且容易产生bug。

4.8关系和boolean运算符

关系运算符:

==  !=  <  >  <=  >=

boolean运算符:

逻辑与&&  逻辑或||  逻辑非!

逻辑与、逻辑或、逻辑非是对boolean值的操作,属于离散数学范畴。按位与、按位或、按位非是对计算机位的操作,属于计算机二进制位运算范畴。

&&和||都是按照短路方式来求值的,当第一个操作数已经能确定表达式的值时,第二个操作数就不会再计算了。这一点可以巧妙地使用:
x != 0 && 1/x > x+y; //no division by 0

如果x等于0,那么第二部分就不会计算,也就是不会计算1/x,这样就避免了除以0的错误。

Java支持三元操作符?:

condition ? expression1 : expression2

如果条件为true,上面这个表达式的值就是表达式1的值,如果条件为false,上面这个表达式的值就是表达式2的值。例如:

x<y ? x : y;//会返回x和y中较小的那一个

4.9位运算符  (?不懂)

&("and")  |("or")  ^("xor")  ~("not")

移位运算符>>和<<

>>>运算符  (不存在<<<运算符)

4.10括号与运算符级别

如果不使用圆括号,就按照运算符优先级次序进行计算。同一个级别的运算符按照从左向右的次序进行计算(右结合运算符除外)。

例如,由于&&的优先级比||高,所以表达式

a && b || c

等价于

(a && b) || c

由于+=是右结合运算符,所以表达式

a += b += c

等价于

a += (b += c)

Java运算符优先级表见《Java核心技术卷一》p44.

与C/C++不同,Java不使用逗号运算符,不过可以在for语句中使用逗号分隔表达式列表。

5.字符串

从概念上讲,Java字符串就是Unicode字符序列。Java中没有内置的字符串类型,而是在标准Java类库中提供了一个预定义类,叫做String,Java中每个用双括号括起来的字符串都是String类的一个实例:

String e = ""; //an empty string

String greeting = "Hello";

5.1子串

String类的substring方法可以从一个较大的字符串中提取出一个子串。例如:

String greeting = "Hello";

String s = greeting.substring(0,3); //s等于“Hel”

substring方法的第二个参数表示的是不想复制的第一个位置,例如上面的代码表示复制位置0,1,2的字符。

5.2拼接

与绝大多数程序设计语言一样,Java允许使用+号拼接两个字符串。

String expletive = "Expletive";

String PG13 = "deleted";

String message = expletive + PG13;  //message等于"Expletivedeleted"

当将一个字符串与一个非字符串的值进行拼接时,后者会转换成字符串,例如:

int age = 13;

String rating = "PG" + age; //rating等于"PG13"

这一特性经常用在输出语句中,例如:
System.out.println("The answer is " + answer);

如果需要把多个字符串放在一起,用一个界定符分隔,可以使用静态join方法:

String all = String.join(" / ", "S", "M", "L", "XL"); //all等于“S / M / L / XL”

在Java11中,还提供了一个repeat方法:

String repeated = "Java".repeat(3);  //repeated等于"JavaJavaJava"

【Java核心技术阅读笔记】第三章 Java的基本程序设计结构相关推荐

  1. java虚拟机读书笔记 第三章 垃圾收集器和内存分配策略

    java虚拟机读书笔记 第三章 垃圾收集器和内存分配策略 GC需要完成的三件事情:哪些内存需要回收.什么时候回收.如何回收 垃圾回收器在对堆进行回收前,首先要确定那些对象存活,哪些对象已经死去,判断的 ...

  2. 深入理解 C 指针阅读笔记 -- 第三章

    Chapter3.h #ifndef __CHAPTER_3_ #define __CHAPTER_3_/*<深入理解C指针>学习笔记 -- 第三章*//*它们都保存在栈中的什么位置?*/ ...

  3. 【深入理解Java虚拟机学习笔记】第二章 Java 内存区域与内存溢出异常

    最近想好好复习一下java虚拟机,我想通过深读 [理解Java虚拟机 jvm 高级特性与最佳实践] (作者 周志明) 并且通过写一些博客总结来将该书读薄读透,这里文章内容仅仅是个人阅读后简短总结,加强 ...

  4. 深入Java虚拟机读书笔记第五章Java虚拟机

    Java虚拟机 Java虚拟机之所以被称之为是虚拟的,就是因为它仅仅是由一个规范来定义的抽象计算机.因此,要运行某个Java程序,首先需要一个符合该规范的具体实现. Java虚拟机的生命周期 一个运行 ...

  5. java程序语言设计第三章答案_java语言程序设计课后习题解答张思民第三章

    java语言程序设计课后习题解答张思民第三章 1 第3章 面向对象程序设计基础 [1]什么是 Java 程序使用的类?什么是类库? [解答]:Java 程序的基本单位是类.对象是对事物的抽象,而类是对 ...

  6. 《机器学习》阅读笔记 第三章

    Contents 1. 不同学科中的线性模型[^1] 2. 线性模型:回归任务 2.1 估计方法 2.2 正则化 2.3 广义线性模型 3. 线性模型:分类任务 3.1 对数几率回归 线性判别分析(L ...

  7. Java核心技术 卷1 基础知识 学习笔记——第三章 java的基本程序设计结构

    1. 一个正整数除以0的结果为正无穷大,0/0或者负数的平方根的结果为NaN(不是一个数字): if(x==Double.NaN)//is never true,所有非数值的值都认为是不同的 if(D ...

  8. 如何用java输出方格_第三章 Java类基础知识作业之(输出5*5数字方格,打印星塔)...

    public class Main { public static void main(String[] args) { // main函数的输入参数:Run as -> Run Configu ...

  9. 《Concurrency in Go》阅读笔记 -- 第三章:Go语言并发组件

    <Concurrency in Go> 本章节从goroutine入手,讲解go语言的各种并发原语.在讲解完goroutine之后,对于传统的内存同步访问的并发原语:sync包中的Mute ...

最新文章

  1. 百度的卡尔曼滤波的解释
  2. 记一次用iview实现表格合并单元格的具体操作
  3. Entropy of Primitive: From Sparse Representation to Visual Information Evaluation(TCSVT2015)
  4. boost::python::pointee相关的测试程序
  5. html th不显示下边框,css怎么设置不显示table的边框?
  6. HDOJ 2037 今年暑假不AC 【贪心】
  7. 虚拟机控制数据结构 (VMCS)状态转换
  8. 芯片14纳米与7纳米相比,是不是芯片大一点,性能差不太多呢?
  9. CSS 控制元素 上下左右居中
  10. 数据库对象之存储过程
  11. Vue开发者工具安装祥析
  12. 简述网卡的作用和工作原理_简述网卡的主要功能
  13. jvm:ObjectMonitor源码
  14. lamp技术_LAMP技术简介:
  15. OpenGL使用FBO与PBO上行纹理 (YUYV)
  16. 走进诺奖大师系列:科斯(Ronald H.Coase)
  17. 200行Perl 语言实现 VCD 转ATE测试pattern ---pattern的解析
  18. 计算机 英语 文献翻译,计算机类外文文献翻译_1.doc
  19. CSS 与 地图可视化 三棱锥 (九)
  20. 科技创业的新规律:先创业、再创意

热门文章

  1. Python 动态规划理解
  2. 仿美团外卖,饿了吗 两个ListView联动,左边点击切换右边,右边滑动切换左边
  3. 机器学习()-多分类任务混淆矩阵
  4. SaaSBase:最受欢迎的CRM软件有哪些
  5. CloudFoundry User Account and Authentication (UAA) Server‘s Scope System
  6. 使用 K3d 在 Docker 中运行 Kubernetes 集群
  7. 基于EasyX来使用中点算法画线
  8. 为服务器安装winserver系统无法识别rtx显卡问题
  9. linux 编程--prctl()函数应用
  10. 做素的女人还是香的女人?