数据类型
-
强类型语言
- 要求变量的使用要严格符合规定,所有变量都需要先定义之后使用
-
弱类型语言
-
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 异常抛出情况