java基础知识补充,易错点

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 647
int4字节-32 768 ~ 32 767
long8字节-9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807
byte1字节-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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值