java基础知识补充,易错点

tech2022-08-16  134

java基础知识(java核心技术卷一笔记)

java概述

1.特点:

赏心悦目的语法和易于理解的语义(c++不是这样)提供了一个庞大的库Java 和 C++ 最大的不同在于 Java 采用的指针模型可以消除重写内存和损坏数据的可能性多线程(可以带来更好的交互体验和事实行为)applet(网页运行的java程序)

2.类名:

类名命名规范: 大写字母开头,字母和数字的任意组合,常用骆驼命名法(eg:FirstSample)源代码文件的名字必须与类名相同

3.main方法:

运行已编译的程序时,Java 虚拟机将从指定类中的 main 方法开始执行根据 Java语言规范, main 方法必须声明为 public

数据类型

1.Java是一种强类型语言(这就意味着必须为每一个变量声明一种类型):

Java 没有任何无符号(unsigned) 形式的 int、 long、 short 或 byte 类型在 Java 中,所有的数值类型所占据的字节数量与平台无关。java中一共有8中基本类型(4种整型,2种浮点型,char,boolean) 整型: 类型存储需求取值范围short2字节-2 147 483 648 ~ 2 147 483 647int4字节-32 768 ~ 32 767long8字节-9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807byte1字节-128 ~ 127 浮点类型: 绝大部分应用程序都采用 double 类型没有后缀 F 的浮点数值(如 3.14 ) 默认为 double 类型三个特殊的浮点数值: 正无穷大 负无穷大 NaN (不是一个数字)if (x = Double.NaN) // is never true 所有“ 非数值” 的值都认为是不相同的。然而, 可以使用 Double.isNaN 方法 类型存储需求取值范围float4字节± 3.402 823 47E+38F (有效位数为 6 ~ 7 位)double8字节± 1.797 693 134 862 315 70E+308 (有效位数为 15 位 char类型

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

unicode编码UTF编码方式关系: https://www.cnblogs.com/crazylqy/p/10184291.html

Boolean类型 boolean (布尔)类型有两个值:false 和 true, 用来判定逻辑条件整型值和布尔值之间不能进行相互转换。即不能用0表示false 变量 在 Java 中, 变量的声明尽可能地靠近变量第一次使用的地方, 这是一种良好的程序编写风格。C 和 C++ 区分变量的声明与定义。例如: inti = 10; 是一个定义, 而 extern inti; 是一个声明。在 Java 中, 不区分变量的声明与定义。 常量 在 Java 中, 利用关键字 final 指示常量。关键字 final 表示这个变量只能被赋值一次。一旦被赋值之后, 就不能够再更改了。习惯上,常量名使用全大写。在 Java 中,经常希望某个常量可以在一个类中的多个方法中使用,通常将这些常量称为类常量。可以使用关键字 static final设置一个类常量 数值类型转换 int n = 123456789; float f = n; // f is 1.23456792E8 当使用上面两个数值进行二元操作时(例如 n + f, n 是整数, f 是浮点数,) 先要将两个操作数转换为同一种类型,然后再进行计算。 如果两个操作数中有一个是 double 类型,另一个操作数就会转换为double。 如果其中一个操作数是 float 类型, 另一个操作数将会转换为 float 类型。 如果其中一个操作数是 long 类型, 另一个操作数将会转换为 long 类型。 否则,两个操作数都将被转换为 int 类型。在下图中有 6 个实心箭头,表示无信息丢失的转换; 有 3 个虚箭头, 表示可能有精度损失的转换: 如果试图将一个数值从一种类型强制转换为另一种类型, 而又超出了目标类型的表示范围, 结果就会截断成一个完全不同的值。 例如,(byte) 300 的实际值为 44。不要在 boolean 类型与任何数值类型之间进行强制类型转换, 这样可以防止发生错误。 只有极少数的情况才需要将布尔类型转换为数值类型,这时可以使用条件表达式 b ? 1:0„ 字符串 在 C 程序员第一次接触 Java 字符串的时候, 常常会感到迷惑, 因为他们总将字符串认为是字符型数组: char greetingQ = “Hello”; 这种认识是错误的, Java 字符串大致类似于 char* 指针一定不要使用= 运算符检测两个字符串是否相等! 这个运算符只能够确定两个字串是否放置在同一个位置上。 输入输出语句 要记住一点:如果用一个不存在的文件构造一个 Scanner, 或者用一个不能被创建的文件名构造一个 PrintWriter,那么就会发生异常。Java 编译器认为这些异常比“ 被零除” 异常更严重。现在,应该告知编译器: 已经知道有可能出现“ 输人 / 输出” 异常。这需要在 main 方法中用 throws 子句标记, 如下所示: public static void main(String口 args) throws IOException { Scanner in = new Scanner(Paths.get(“myfi1e.txt”), “UTF-8”) ; } 控制语句 在 C++ 中, 可以在嵌套的块中重定义一个变量。在内层定义的变量会覆盖在外层定义的变量。这样, 有可能会导致程序设计错误, 因此在 Java 中不允许这样做。**在循环中,检测两个浮点数是否相等需要格外小心。**下面的 for 循环 for (double x = 0; x != 10; x += 0 . 1) {} 可能永远不会结束。 由于舍入的误差, 最终可能得不到精确值。 例如, 在上面的循环中, 因为 0.1 无法精确地用二进制表示, 所以,x 将从 9.999 999 999 999 98 跳到10.099 999 999 999 98。如果在 case 分支语句的末尾没有 break 语句, 那么就会接着执行下一个 case 分支语句。这种情况相当危险, 常常会引发错误。 为此, 我们在程序中从不使用 switch 语句中断控制语句:尽管 Java 的设计者将 goto 作为保留字, 但实际上并没有打算在语言中使用它。通常,使用 goto 语句被认为是一种拙劣的程序设计风格。与 C++ 不同,Java 还提供了一种带标签的 break语句, 用于跳出多重嵌套的循环语句。对于任何使用break语句的代码都需要检测循环是正常结束, 还是由 break 跳出。 大数值 如果基本的整数和浮点数精度不能够满足需求, 那么可以使用jaVa.math 包中的两个很有用的类:Biglnteger 和 BigDecimaL 这两个类可以处理包含任意长度数字序列的数值。Biglnteger 类实现了任意精度的整数运算, BigDecimal 实现了任意精度的浮点数运算。使用静态的 valueOf 方法可以将普通的数值转换为大数值: Biglnteger a = Biglnteger.valueOf(100);遗憾的是,不能使用人们熟悉的算术运算符(如:+ 和 *) 处理大数值。 而需要使用大数值类中的 add 和 multiply 方法。 Biglnteger c = a.add(b); // c = a + b Biglnteger d = c.nulti piy(b.add(Biglnteger.val ueOf(2))); // d = c * (b + 2)与 C++ 不同, Java 没有提供运算符重载功能。 数组 应该使用 new 运算符创建数组 int[] a = new int[100];数组长度不要求是常量: newint[n] 会创建一个长度为 n 的数组。如果经常需要在运行过程中扩展数组的大小, 就应该使用另一种数据结构—数组列表在 Java 中,允许数组长度为 0。数组长度为 0 与 null 不同。带String arg[]参数的 main 方法。这个参数表明 main 方法将接收一个字符串数组, 也就是命令行参数 。例如, 看一看下面这个程序: public class Message { public static void main(String[] args) { if (args.length = 0 11 args[0].equals("_h")) System.out.printCHello,")else if (args[0].equa1s("-gM)) System.out.print("Goodbye,")// print the other command-line arguments for (int i = 1; i < args.length; i ++) System.out.print(" " + args[i]); System•out.println("!"); } } //如果使用下面这种形式运行这个程序: java Message -g cruel world //args 数组将包含下列内容: args[0] args[l] args[2] "-g" "cruel" "world" 要想对数值型数组进行排序, 可以使用 Arrays 类中的 sort 方法:(优化的快速排序算法)要想快速地打印一个二维数组的数据元素列表, 可以调用: System.out.println(Arrays.deepToString(a)) ;不规则” 数组, 即数组的每一行有不同的长度。
最新回复(0)