0
点赞
收藏
分享

微信扫一扫

java基础知识整理

秦瑟读书 2022-02-23 阅读 122

java基础知识整理

1.java概述

1.Java 剔除了 C++ 中许多很少使用、 难以理解、 易混淆的特性, 在目前看来, 这些特性带来的麻烦远远多于其带来的好处。
2.Java 有一个丰富的例程库, 用于处理像 HTTP 和 FIT 之类的 TCP/IP 协议。Java 应用
程序能够通过 URL 打开和访问网络上的对象, 其便捷程度就好像访问本地文件一样。
3.Java 和 C++ 最大的不同在于 Java 采用的指针模型可以消除重写内存
和损坏数据的可能性。

4.Java 编译器能够检测许多在其他语言中仅在运行时才能够检测出来的问题。
5.Java 适用于网络 / 分布式环境。 为了达到这个目标, 在安全方面投入了很大精力。 使用 Java 可以构建防病毒、 防篡改的系统。从一开始,Java 就设计成能够防范各种攻击,其中包括:运行时堆栈溢出。 如蠕虫和病毒常用的攻击手段。破坏自己的进程空间之外的内存。未经授权读写文件。
6.解释虚拟机指令肯定会比全速运行机器指令慢很多。 然而, 虚拟机有一个选项,可以将执行最频繁的字节码序列翻译成机器码,这一过程被称为即时编译。
7.与 C 和 C++ 不同,Java 规范中没有“ 依赖具体实现” 的地方,基本教据类型的大小以及有关运算都做了明确的说明。(例如,Java 中的 int 永远为 32 位的整数,而在 C/C++ 中, int 可能是 16 位整数、 32 位整数, 也可能是编译器提供商指定的其他大小)。
8.Java 成功地推出后不久, 微软就发布了一个叫做 J++ 的产品,它与 Java 有几乎相同的编程语言以及虚拟机,现在, 微软不再支持 J++, 取而代之的是另一种名为 C# 的语言。C# 与 Java 有很多相似之处, 然而使用的却是完全不同的虚拟机。
9.JavaScript 和Java 几乎没有任何关系。

2.java程序设计

1.根据 Java语言规范, main 方法必须声明为 public。
2.System.out 还有一个 print 方法, 它在输出之后不换行。 例如, System.out.print
“( Hello”)打印“ Hello” 之后不换行。
3.在 Java 中,/* / 注释不能嵌套 „ 也就是说, 不能简单地把代码用 / 和 */ 括起来
作为注释, 因为这段代码本身可能也包含一个 */ 。
4.Java 是 -种强类型语言。这就意味着必须为每一个变量声明一种类型: 在 Java 中,共有 8
种基本类型 , 其中有 4 种整型、2 种浮点类型、 1 种用于表示 Unicode 编码的字符
单元的字符类型 char 和 1 种用于表示真值的 boolean 类型。
5.Java 没有任何无符号(unsigned) 形式的 int、 long、 short 或 byte 类型。
6.可以使用十六进制表示浮点数值。例如,0.125=2^{-3} 可以表示成 0x1.0p-3。在十六
进制表示法中, 使用 p 表示指数, 而不是 e。 注意, 尾数采用十六进制, 指数采用十进
制。指数的基数是 2, 而不是 10。

7.常量 Double.POSITIVE_INFINITY、Double.NEGATIVE_INFINITY 和 Double.NaN
( 以及相应的 Float 类型的常量)分别表示这三个特殊的值(正无穷大,负无穷大,NaN, 但在实际应用中很少遇到。特别要说明的是, 不能检测一个特定值是否等于 Double.NaN,然而, 可以使用Double.isNaN 方法。
8.char 类型的值可以表示为十六进制值,其范围从 \u0000 到 \Uffff。
9.所有转义序列都可以出现在加引号的字符字面量或字符串中。 例如,’\02122’ 或 "Hello\n”。 转
义序列 \u还可以出现在加引号的字符常量或字符串之外(而其他所有转义序列不可以)。 例
如:public static void main(String\u005B\ u005D args) 就完全符合语法规则, \u005B 和 \u005D 是 [ 和 ] 的编码。

10.Unicode 转义序列会在解析代码之前得到处理。 例如,"\u0022+\u0022” 并不是一个由引号(U+0022) 包围加号构成的字符串。 实际上, \u0022 会在解析之前转换为 ", 所以说这是一个空串。
11.更隐秘地, 一定要当心注释中的 \u。注释 // \u00A0 is a newline 会产生一个语法错误, 因为读程序时 \u00A0 会替换为一个换行符。类似地, 下面这个注释:
// Look inside c:\users
也会产生一个语法错误, 因为 \u 后面并未跟着 4 个十六进制数。

12.在 1991 年发布了 Unicode 1.0, 当时仅占用 65 536 个代码值中不到一半的部分。在设计 Java 时决定采用 16 位的 Unicode 字符集,这样会比使用 8 位字符集的程序设计语言有很大的改进。十分遗憾, 经过一段时间, 不可避免的事情发生了。Unicode 字符超过了 65 536 个,其主要原因是增加了大量的汉语、 日语和韩语中的表意文字。现在, 16 位的 char 类型已经不能满足描述所有 Unicode 字符的需要了。
13.UTF-16 编码采用不同长度的编码表示所有 Unicode 码点。在基本的多语言级别中,每个字符用 16 位表示,通常被称为代码单元(code unit) ; 而辅助字符采用一对连续的代码单元进行编码。、
14.在 Java 中,char 类型描述了 UTF-16 编码中的一个代码单元。强烈建议不要在程序中使用 char 类型, 除非确实需要处理 UTF-16 代码单元。最好将字符串作为抽象数据类型处理。
15.变量名必须是一个以字母开头并由字母或数字构成的序列。需要注意,与大多数程序设计语言相比,Java 中“ 字母” 和“ 数字” 的范围更大。字母包括 ’A’ ~ ’Z’、 ’a’~ ’z’、‘_’,‘$’或在某种语言中表示字母的任何 Unicode 字符。
16.变量名中所有的字符都是有意义的,并且大小写敏感。变量名的长度基本上没有限制。
17.如果想要知道哪些 Unicode 字符属于 Java 中的“ 字母”, 可以使用 Character 类的isJavaldentifierStart 和 isJavaldentifierPart 方法来检查。
18.尽管 $ 是一个合法的 Java 字符, 但不要在你自己的代码中使用这个字符。 它只用
在 Java 编译器或其他工具生成的名字中。

19. const 是 Java 保留的关键字, 但目前并没有使用。 在 Java 中, 必须使用 final定义常量。
20. 需要注意, 整数被 0 除将会产生一个异常, 而浮点数被 0 除将会得到无穷大或 NaN 结果。
21. 操作数转换为同一种类型,然后再进行计算。

  • 如果两个操作数中有一个是 double 类型, 另一个操作数就会转换为 double 类型。
  • 否则, 如果其中一个操作数是 float 类型, 另一个操作数将会转换为 float 类型。
  • 否则, 如果其中一个操作数是 long 类型, 另一个操作数将会转换为 long 类型。
  • 否则, 两个操作数都将被转换为 int 类型。
    在这里插入图片描述6 个实心箭头,表示无信息丢失的转换; 有 3 个虚箭头, 表示可能有精度损失的转换。

22.如果试图将一个数值从一种类型强制转换为另一种类型, 而又超出了目标类型的表示范围, 结果就会截断成一个完全不同的值。 例如,(byte) 300 的实际值为 44。
23.如果 x 是一个 int, 则以下语句x += 3.5 是合法的,它将把 x 设置为(int)(x + 3.5)。
24.应用在布尔值上时,& 和丨运算符也会得到一个布尔值。这些运算符与 &&和| |运
算符很类似, 不过 & 和丨运算符不采用“ 短路” 方式来求值。

25.>>> 运算符会用 0 填充高位,这与>>不同,它会用符号位填充高位。不存在 <<<运算符。
26.如果虚拟机始终将相同的字符串共享, 就可以使用运算符检测是否相等。但实际上只有字符串常量是共享的,而+ 或 substring 等操作产生的结果并不是共享的。因此,千万不要使甩 运算符测试字符串的相等性, 以免在程序中出现糟糕的 bug。
27.java中的String类型的length()方法实际上返回的是代码单元的数量,而不是码点(字符)的数量。
28.在 C++ 中, 可以在嵌套的块中重定义一个变量。在内层定义的变量会覆盖在外层定义的变量。这样, 有可能会导致程序设计错误, 因此在 Java 中不允许这样做。
29.对于switch语句,case 标签可以是:

  • 类型为 char、byte、 short 或 int 的常量表达式
  • 枚举常量
  • 从 Java SE 7 开始, case 标签还可以是字符串字面量

30.当在 switch 语句中使用枚举常量时,不必在每个标签中指明枚举名,可以由 switch 的表
达式值确定。例如:
在这里插入图片描述
31. 与C++ 不同, Java 没有提供运算符重载功能。 程序员无法重定义 + 和 * 运算符, 使其应用于 BigInteger类的 add 和 multiply 运算。 Java 语言的设计者确实为字符串的连接重载了 + 运算符,但没有重载其他的运算符,也没有给 Java 程序员在自己的类中重载运算符的机会。
32. 使用静态的 valueOf 方法可以将普通的数值转换为大数值。遗憾的是,不能使用人们熟悉的算术运算符(如:+ 和 *) 处理大数值。 而需要使用大数值类中的 add 和 multiply 方法。
33. for each 循环语句不能自动处理二维数组的每一个元素。它是按照行, 也就是一维数组处理的。要想访问二维教组 a 的所有元素, 需要使用两个嵌套的循环。
34. 要想快速地打印一个二维数组的数据元素列表, 可以调用:
System.out.println(Arrays.deepToString(a)) ;

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

3.对象与类

举报

相关推荐

0 条评论