Java 基础

140 阅读7分钟

数据类型

  • 强类型语言

    • 要求变量的使用要严格符合规定,所有变量都需要先定义之后使用
  • 弱类型语言

  • java中的数据类型分为两类

    • 基本类型(primitive type)
    • 引用类型(reference type)

基本类型

  • 数值类型
    • 整型
      • byte占一个字节
      • short占2个字节
      • int占4个字节
      • long占8个字节
    • 浮点类型
      • float占4个字节
      • double占8个字节
    • 字符类型
      • char占2个字节
  • Boolean类型 占1位只有TRUE和FALSE

    虽然 Java 虚拟机定义了 boolean 这种数据类型,但是只对它提供了非常有限的支持。在 Java 虚拟机中没有任何供 boolean 值专用的字节码指令,在 Java 语言之中涉及到 boolean 类型值的运算,在编译之后都使用 Java 虚拟机中的 int 数据类型来代替。 Java 虚拟机直接支持 boolean 类型的数组,虚拟机的 newarray 指令可以创建这种数组。boolean 的数组类型的访问与修改共用 byte 类型数组的 baload 和 bastore 指令。
    综上所述, 单个boolean型是占4字节(因为变异后会用int来代替), 而boolean数组中的则占1字节(因为用byte来代替的)

char类型

  • 字符型存储到计算机中,需要将字符对应的码值(整数)找出来,比如 'a',存储:'a'==> 码值97===>二进制(0110 0001)===> 存储
  • 字符和码值的对应关系是通过字符编码表决定的
    • ASCII (ASCII编码表用一个字节表示,一共128个字符,实际上一个字节可以表示256个字符,只用128个)
    • Unicode
      • Unicode的好处:一种编码,将世界上所有的符号都纳入其中。每一个符号都给赋予一个独一无二的编码,使用Unicode没有乱码的问题。
      • Unicode的缺点:一个英文字母和一个汉字都占用2个字节,这对于存储空间来说是浪费。
      • 2的16次方是65536,所以最多编码是65536个字符。
      • Unicode码兼容ASCII码
    • utf-8
      • utf-8是在互联网上使用最广泛的一种Unicode的实现方式
      • utf-8是一种变长的编码方式。它可以使用1-6个字节表示一个符号,根据不同的符号而变化字节长度
      • 使用大小可变的编码,字母占一个字节,汉字占3个字节
    • gbk(字母使用1个字节,汉字使用2个字节)
    • gb2312 (字母使用1个字节,汉字使用2个字节 gb2312 < gbk)
    • big5码 (繁体中文)

引用类型

  • 接口
  • 接口

类型转换

  • 由于java是强类型语言,所有要进行有些运算的时候,需要用到类型转换

低------------------------------------> 高
byte,short,char->int->long->float->double

  • 运算中,不同类型的数据先转化为同一类型,然后进行运算

  • 有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算。

  • 当我们吧精度(容量)大的数据类型赋值给精度(容量)小的数据类型时,就会报错,反之就会进行自动类型转换

  • (byte,short)和char之间不会相互自动转换

  • byte,short,char 它们三者可以计算,在计算时首先转化成int类型

  • Boolean不参与转换

  • 自动提升原则:表达式结果的类型自动提升为 操作数中最大的类型

  • 强制类型转换

    • 从高到低时候需要
    • 自动类型转换的及过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符(),但可能造成精度降低或者溢出。
  • 自动类型转化

    • 从低到高时候不需要 (精度小的类型转成精度大的类型)

变量

  • 变量是什么:就是可以变化的量
  • Java是一种强类型语言,每个变量都必须声明其类型
  • Java变量是程序中最基本的存储单元,其要素包括变量名、变量类型和作用于
type varName [=value] [{,varName[=value]}];
  • 注意
    • 每个变量都有类型,类型可以使基本类型,也可以是引用类型
    • 变量名必须是合法的标识符
    • 变量声明是一条完整的语句,因此每一个声明都必须以分号结束

变量作用域

  • 类变量
    • static 开头的变量
  • 实例变量
    • 需要使用new 关键字
    • 从属于对象
    • 如果不自行初始化,这个类型的默认值,系统会自动赋默认值
    • 除了基本类型,其余的默认值都是null
  • 局部变量
public class Variable{
    static int all = 0; // 类变量
    String str = "Hello"; // 实例变量
    public void method() {
        int i = 0; // 局部变量
    }
}

常量

  • 常量(constant):初始化(initialize)后不能再改变值,不会改变的值
  • 所谓常量可以理解成一种特殊的变量,它的值被设定后,在程序云信过程中不允许被改变

final 常量名=值;
final double PI = 3.14;

  • 常量一版使用大写字符

变量的命名规范

  • 所有变量、方法、类名:见名知意
  • 类成员变量:首字母小写和驼峰原则:monthSalary 除了第一个单词以外,后面的单词首字母大写 lastnamelast
  • 局部变量:首字母小写和驼峰原则
  • 常量:大写字母和下划线:MAX_VALUE
  • 类名:首字母大写和驼峰原则:Man,GoodMan
  • 方法名:首字母小写和驼峰原则:run(), runRun()

运算符

  • java支持如下运算符:
    • 算数运算符: +, -, *, /, %, ++, --

      • %(取模)的本质可以看成一个公式 a % b = a - a / b * b
    • 赋值运算符:=

    • 复合赋值运算符:+= *= /+ %=

      • 赋值运算符特点

      运算符从右往左
      赋值运算符的左边只能是变量,右边可以是变量、表达式、常量值
      复合赋值运算符会进行类型转换

    • 关系运算符:>,<,>=,<=,==,!=,instanceof

    • 逻辑运算符:&&,||,!

    • 位运算符:&, |, ^, ~, >>, <<, >>>

      • && 和 && 使用区别

      && 短路与:如果第一个条件为false,则第二个条件不会判断,最终结果为false,效率高。
      & 逻辑与:不管第一个条件是否为false,第二个条件都要判断,效率低

      • || 和 | 使用区别

      || 短路或:如果第一个条件为true,则第二个条件不会判断,最终结果为true,效率高
      | 逻辑或:不管第一个条件是否为true,第二个条件都要判断,效率低

      • 算数右移 >>

      低位溢出,符号位不变,并用符号位补溢出的高位

      • 算数左移 <<

      符号位不变,低位补0

      • 逻辑右移

      无符号右移,运算规则是,低位溢出,高位补0

    • 条件运算符:?:

进制

  • 二进制:0,1 满2进1,以0b或者0B开头。
  • 十进制:0-9, 满10进1。
  • 八进制:0-7, 满8进1,以数字0开头表示。
  • 十六进制:0-9及(10)-F(15),满16进1,以0x或者0X开头表示

源码、反码、补码

  • 二进制的最高位是符号位:0表示正数,1表示负数。
  • 正数的原码、反码、补码都一样(三码合一)
  • 负数的反码 = 它的原码符号位不变,其他位取反(0->1, 1->0)
  • 负数的补码 = 它的反码 + 1,负数的反码 = 负数的补码 - 1
  • 0的反码,补码都是0
  • java没有无符号数,换言之,java中的数都是有符号的
  • 在计算机运算的时候,都是以补码的方式来运算的。
  • 当我们看运算结果的时候,要看它的原码。

包机制

  • 为了更好地组织类,Java提供了包机制,用于区别类名的命名空间
  • 包语句的语法格式为
package pkg1[.pkg2[.pkg3...]];
  • 一般利用公司域名倒置作为包名:
  • 为了能够使用某一个包的成员,我们需要在Java程序中明确导入该包。使用’import‘语句可完成此功能
import package1[.package2...].(classname|*);

java Doc

  • Javadoc命令用来生产紫的API文档的
  • 参数信息
    • @author 作者名
    • @version 版本号
    • @since 指明需要最早使用的jdk版本
    • @param 参数名
    • @return 返回值情况
    • @throws 异常抛出情况