[Java] 入门(01)

  本博主是 JavaScript 出身的,使用的是弱类型语言;所以对于强类型语言,或者面向对象开发类型的语言,很多细节都不太习惯。本入门系列文章,都是为了加固 强类型语言/面向对象 的一下概念、关键字 和 方法等知识。

  1、Java 的基本知识:  

1 /// Java 的源代码的文件名 必须与公共类 的名字相同,并用 .java 作为扩展名 (大小写也要保持一致)
2 
3 /// 命令行 编译 和 运行java 程序:
4 ///        编译:javac 源代码文件名(带扩展名 .java) -> 编译后的的文件为 源代码文件名.class
5 ///        运行:java 源代码的文件名(不带扩展名 .class)
6 /// javac 程序是一个 Java 编译器
7 /// java 程序启动 Java 虚拟机,虚拟机执行编译器放在 .class 文件中的字节码
8 
9 /// main 入口,必须声明为 public (Ps: 虽然有些 Java 解析器 当 main 不是 public 也可以运行 但这点只需要知道就行了,我们通常都是必须要为 public 的)

  

  2、基本类型:

1 /// Java 有 8 种基本类型(primitive type),其中有 4种整型、2种浮点型、1种用于表示 Unicode 的编码的字符单元的字符类型 char 和 一种表示真值的boolean 类型。
2 /// int、short、long、byte、float、double、char 和 boolean

 (A)、整型(Java 中没有任何无符号(unsigned) 形式的 int、long、short 或者 byte 类型): 

Java 整型
类型 存储需求 取值范围 使用场景
int 4 字节  -2 147 483 648 ~ 2 147 483 647(正好超过20亿) 最常用
short 2 字节 -32 768 ~ 32 767 底层的文件处理或者需要控制占用存储空间量的大数组
long 8 字节 -9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807 星球上的居然人数
byte 1 字节 -128 ~ 127 底层的文件处理或者需要控制占用存储空间量的大数组

 (B)、浮点型:

Java 浮点型
类型 存储需求 取值范围 特点
float 4 字节 大约 ± 3.402 823 47E + 38F (有效位数为 6 ~ 7) float 类型的数值后缀 F 或 f,没有后缀的默认是 double 类型
double 8 字节 大约 ± 1.797 693 134 862 315 70E + 308(有效位数为 15位) double 类型的后缀是 D 或者 d,没有后缀的默认是 double 类型

    Ps:

      1、所有的浮点数值计算都遵循 IEEE 754 规范。
      2、常量 Double.POSITIVE_INFINITY(double 类型的正无穷大)、Double.NEGATIVE_INFINITY(double 类型的负无穷大)和 Double.NaN(Double 类型的 NaN)

      3、检测一个特定值是不是 等于 Double.NaN 只能用 Double.isNaN(特定值) 这个方法。因为所有 “非数值” 的值都认为是不相同的。
      4、Float 类型也有它自己的 正无穷大、负无穷大或者是 NaN, 把 Double 改成 Float 就行了

      5、浮点类型的计算还是有误差的,在金融计算中,不能用 因为涉及金钱方面的,要求精确。后面会说的 金融计算中,使用的 BigDecimal 类

 (C)、char 类型:

    1、原本是表示单个字符的,但是现在有些 Unicdoe 字符可以用一个 char 值 描述,另一些 Unicode 字符则需要两个 char 值。
    2、char 类型的字面量值要用 单引号括起来。

    3、在 Java 的核心技术中,有大致说到 Unicode 和 char 类型,但是这部分需要理解完整的 编码 知识,博主知识库不充足,需要的请自己去详情了解一下。


 (D)、boolean 类型:

    1、boolean 类型的值,就只有 true Or false 两个值,用来判定逻辑条件。

    2、与 JavaScript 中的不同,Java 中的 整型值 和 布尔值 之间 不能进行相互转换


  

  3、变量:      

1 /// 在 Java 中,每一个变量都有一个类型 (type)。在声明变量时,变量的类型位于变量名之前。
2 /// Java 中的变量名,必须是一个以字母开头 并 由 字母或 数字构成的序列
3 /// 与其他语言相比,Java 中的 “字母” 和 “数字” 的范围更加大,字母包括 'A' ~ 'Z'、'a' ~ 'z'、'_'、'$' 外,还可以使某种语言中表示字母的任何 Unicode 字符。比如希腊人可以用 π,德国人可以用 'ä' 

    Ps: 

      1、不能使用 Java 保留字 作为变量名

      2、要知道哪些 Unicode 字符属于 Java 中的字母,可以使用 Character 类的 isJavaIdentifierStart 和 isJavaIdentifierPart 去检查

      3、尽管 $ 是 一个合法的 Java 字符,但不要在自己的代码中使用这个字符,它只用在 Java 的编译器 或其他工具生成的名字中。

      4、虽然可以一行声明多个变量,但不提倡使用这种风格,因为逐一声明每一个变量可以提高程序的可读性。

      5、变量声明后,要初始化才能使用,否则会报 // ERROR--variable not initialized 错误

      6、Java 中,提倡变量的声明,尽可能靠近变量第一次使用的地方,这是一种良好的编写风格。


  

  4、常量:

    1、在 Java 中,利用关键 final 指示常量,例如: final double CM_PER_INCH = 2.54;

    2、关键字 final 表示这个变量只能被赋值一次,一旦赋值后,就不能够再更改了。

    3、习惯上,常量名使用全大写。

    4、在 Java 中,希望某个常量可以在一个类中的多个方法使用,通常将这些常量成为 类常量;使用关键字 static final 设置。

    5、类常量 定义位于 方法的外部。

    6、在 JavaScript 中 定义常量使用的是 const, 在 Java 中 const 是作为保留关键字,目前未被使用。

    7、在运算时候,比如 cos ,sin, tan 等数学方法,都在 Math 类中。

      8、Java 中提供了两个接近 π 和 e 的常量的近似值:Math.PI 和 Math.E

    


   

   5、数值类型之间的转换: 

    1、实心箭头表示唔信息丢失的转换,虚箭头表示可能有精度损失的转换。

      

    2、如果两个操作数有一个是 double 类型,另一个操作数会转换为 double 类型;

     否则,如果其中一个操作数使 float 类型,另一个操作数将会转成 float 类型;

     否则,如果其中一个操作数为 long 类型,另一个操作数将会转成 long 类型;

       否则,两个数都会被转成为 int 类型

    3、强制类型转换, 强制类型转换的语法格式是圆括号中给出想要转换的目标类型,后面紧跟待转换的变量名,例如:        

1 double x = 9.997;
2 int nx = (int) x;

    4、如果强制转换的值,超过目标类型的范围,就会被截取成一个完全不同的值。比如 int 300 转换成 byte 类型 的实际值 为44。

  


  

  6、枚举类型:

    1、有时候变量的值只在一个有限的集合内,就要用到自定义枚举类型,例如:销售的服装尺寸只有 小、中、大和超大 这四种尺寸。

1 /// 这里定义枚举类型
2 enum Size { SMALL, MEDIUM, LARGE, EXTRA_LARGE };

3 ///  上面定义完后,可以使用这种枚举类型
4 /// Size 类型的变量只能存储在这个类型声明中给定的某个枚举值
5 /// 或者 null 值,null 表示这个变量没有设置任何值
6 Size s = Size.MEDIUM;

  

       


  

  7、字符串:

    1、从概念上来说,Java 字符串 就是 Unicode 字符串序列。

      2、Java 中没有内置的字符串类型,而是在 标准的Java 类库中提供了一个 预定义类,叫做 String.

      3、每个用双引号括起来的字符串都是 String 类的一个实例。

      4、Java 中的 String 是不可变字符串,没有提供修改的字符串的方法(说的应该就是没有 replace 方法了)

      5、第四点的原因,是因为编译器可以让字符串共享。

      6、检测字符串是否相等,表达式:

/// s 和 t 可以使字符串变量,也可以使字符串字面量。
/// equals 是区分大小写的 
s.equals(t) 

/// 不区分大小写可以使用 equalsIgnoreCase 方法
s.equalsIgnoreCase(t)

      7、不能使用 == 运算符,判断连个字符串是否相等,这个运算符只能确定两个字符是否放在同一个位置上。例如:

String greeting = "Hello";
if (greeting == "Hello")...
// probably true
if (greeting.substring(0, 3) == "Hel")...
// probably false 

       8、因为实际上,只有字符串常量是共享的,而 + 或 substring 等操作产生的结果并不共享。

       9、空串 和 Null 串:

  

 1 /// 空串是长度为 0 的字符串,可以使用下面的方法检查是否为空串:
 2 if (str.length() == 0) ..
 3 // 或者
 4 if (str.equals(""))...
 
 5 /// Null 串是一个特殊值,表示目前没有任何对象与该变量关联。
 6 /// 检查字符串是否为 null 使用 ==
 7 if (str == null)...
 
 8 /// 检查字符串不是既不是空串,也不是 null 串时,要先判断 null 串,因为 null 上面是没有 length() 方法,会导致报错的

  

猜你喜欢

转载自www.cnblogs.com/-xk94/p/12331831.html