java学习笔记(一)

java 执行流程

  • java 粗略执行流程
    • 源文件编译成 .class 字节码文件 ->解释执行 jre( 装载 -> 字节码校验 -> jvm 执行)
    • jdk 包含了 javac jre debugging tools javap
  • javeSE(java标准版本) JAVAEE(java商业版) 与 JAVAME(设备专用) 一般分为这三块

第一个 java 程序

1
2
3
4
5
public class hello {
public static void main(String [] args){
System.out.println("hello world");// 这里的分号必加
}
}
  • 注意点

    • 需要先使用 javac 编译出 .class 文件 再执行 java
    • 源文件只能有一个跟文件名相同的 public 类名
    • main 方法为 java 固定入口 有固定的书写格式 public static void main(String[] args){}
    • JAVA 对大小写敏感
    • windows 安装后 1.5以上只需要 设置 JAVAHOME /path/to%JAVA_HOME%\bin 便于执行 java -version javac
  • eclipse 编辑器下载地址 确实下的很慢

    • 如何打开 package explorerwindows 里面的 show view 下的 package explorer

注释

  • // 单行注释
  • / 多行注释 /
  • /* 文档注释 /
  • 注释是不会出现在字节码文件中的

标识符

  • 可以用 _ $ 字母 开头 建议使用小驼峰,不要使用 $_ 开头
  • 大小写敏感,不能用关键字
  • 类名 大驼峰 , 其它小驼峰

变量

  • 变量名称

    • 见标识符
  • 变量类型
  • 变量作用域

    • 局部变量
      • 方法或者语句块中定义的变量
      • 使用时必须要先 ==初始化==
      • 生命周期从声明位置开始到语句块 比如{} 或者 方法执行完毕为止
    • 成员变量

      • 也叫实例对象(member variable)方法外部,类的内部定义的变量,从属于==对象==,
      • 生命周期伴随对象始终
      • 如果不赋值,它会自动初始化成该类型的默认初始化值

        数据类型|实例化初始值
        :-:|:-:
        int|0
        double|0.0
        char|'\u0000'
        boolean|false

    • 静态变量

      • 使用 static 定义,从属于==类==,生命周期伴随类始终,从类加载到卸载
  • 变量声明 与 初始化
    • int ss 声明
    • int ss = 2 声明并赋值

常量(Constant)

  • 声明后值不会改变的量叫常量
  • 使用 final 关键字可以将变量转为符号常量
  • 1,’2’,3,”hello” 属于字面常量 也就是说直接写出来的常量

基本数据类型(primitive data type)

  • 数值
    • 整数类型(byte 1字节8位,short 2,int 4,long 8)
    • 浮点类型(float 4,double 8)字节
    • 字符型(char)2字节
    • 布尔型(boolean)1位
  • 引用数据类型 4字节存储对象的地址
    • class
    • 接口 interface
    • 数组 array

数值型

类型 占用存储空间 表示范围
byte 1字节 8位 -2^7 ~ 2^7-1(-128~127)
short 2字节 16位 -2^15 ~ 2^15-1(-32768~32767)
int 4字节 32位 -2^31 ~ 2^31-1 约21亿
log 8字节 64位 -2^63 ~ 2^63-1
  • 进制
    • 八进制 以 0 开头
    • 十六进制 以 0x或者 0X 开头 0x15
    • 二进制 要求以 0b或者0B开头, 0b01110011
  • long 类型需要显示的加上 ==L== 不加l 是避免混淆
    • long e = 222222222L;

浮点型

类型 占用存储空间 表示范围
float 4字节 32位 -3.403E38 ~3.403E38
double 8字节 64位 -1.798E308 ~ 1.798E308
  • 浮点数的表示形式
    • 十进制 3.14 314.0 0.314
    • 科学计数法 314e2 314*100 134E-2 314/100
  • float 可以表示==7==位有效数字
    • float 类型 ==必须== 要 在后面加上 F
  • double 可以表示==15==位有效数字
    • bouble默认小数的类型3.13 或 3.14D 也可以在后面加上 D
  • 浮点数运算比较都是不精确的,一般使用 java.mathBigInterge,BigDecimal 类用于不容许舍入误差的金融计算领域

字符型

  • char 是表示 Unicode 编码的一种实现 2字节 65535

Boolean

  • true | false

运算符

- - -
算术运算符 二元运算符 +,-,*,/,%
算术运算符 一元运算符 ++,–
- -
扩展运算符 +=,-=,*=,/=
关系运算符 >,<, >= ,<=,== ,!=, instanceof
逻辑运算符 &&,` ,!,^,& `
位运算符 & ,` ^`,~,>>,<<,>>>
条件运算符
字符串连接运算符 +

算术运算符

  • 算术运算符
    • 整数运算
      • 两个操作数,只要有一个为long 结果为long
      • 没有long 时结果为int,即使操作数全为shortbyte 结果也是 int
    • 浮点运算
      • 如果两个数有一个为 double 结果为 double
      • ==只有两个数都是== float 结果才是 float
    • 取模运算
      • 其操作数可以为浮点数,结果为还是按上面规则走
      • 余数的符号跟==左边操作数的符号==相同
      • 7%3=1 -7%3=-1 7%-3=1 3.14%3=0.14000000000000012
    • ++ --
      • 前++后++ 的区别 先赋值还是后赋值的问题

赋值运算符与扩展运算符

  • = +=

关系运算符

  • <,>,<=,=>,!= 结果为 boolean

逻辑运算符

  • ^ 相同为 false 不同为 true & | ! 用与bool数之间是比较 用于 int 数之间为位运算
  • 注意 &| 还有 &&|| 的 逻辑短路现象

位运算符

  • << 12 >> 1除以2
1
2
3
4
5
6
int as = 1;
int bs = 2;
System.out.println(~as); //-2
System.out.println(bs<<2); //8
System.out.println(bs>>1); //1
System.out.println(bs>>3); //0

字符串连接符

  • + 前后 如果有一者为 字符串 那么就变成字符串连接操作

条件运算符

  • 三目(元)运算符 a?x:y;

运算符优先级

优先级 运算符 结合性
1 {} 括号运算符 由左至右
2 +(正号),-(负号) 一元运算符 由左至右
2 ~ 位逻辑运算符 由右至左
2 ++-- 递增递减运算符 由右至左
3 */% 算术运算符 由左至右
4 +- 算术运算符 由左至右
5 <<>> 位运算符 由左至右
6 <,>>=,<= 关系运算符 由左至右
7 ==!= 关系运算符 由左至右
8 & 位运算符,逻辑运算符 由左至右
9 ^ 位运算符,逻辑运算符 由左至右
10 ` ` 位运算符,逻辑运算符 由左至右
11 && 逻辑运算符 由左至右
12 ` ` 逻辑运算符 由左至右
13 ?: 条件运算符 由右至左
14 =,+=,-=,*=,/=,%= 赋值运算符,扩展运算符 由右至左
  • >&>^>|>&&>||
  • a||b&&c 意思是 a||(b&&c)
  • 简记为 ==算术>关系>逻辑== 也就是先运算再比较最后为赋值

自动类型转换

  • 原则为 容量小转换为 容量大的 (不一定是字节数)
  • byte-->short-->int-->long
  • char-->int
  • int-->double
  • int-->float(精度丢失)
  • int-->double
  • long-->float(精度丢失)
  • long-->double (精度丢失)
  • float-->double

强制类型转换

  • 强制类型转换进行运算的时候先要考虑溢出情况
  • 只需要在变量前面加上(type) 就能强制转换,可强制转换的 type 只包括数值与字符类型
  • double x = 3.14; int nx = (int)x

流程控制

顺序结构

选择结构

  • if 单选择结构
  • if else 双选择结构
  • if else if else 多选择结构
    • else if 中间必须加空格
  • switch 多选择结构
    • php 没什么区别
    • switch中case标签在 jdk1.5 以前必须是整数(long类型除外)或者,枚举,不能是字符串
    • jdk1.7 以后允许使用字符串(String)

循环结构

  • while(布尔表达式){ 循环体 }
  • do{ 循环体 }while(布尔表达式)
  • for(赋值,赋值;比较条件,默认值){ 循环体 }
    • 支持逗号隔开的多重初始化
    • 赋值的作用域仅限于循环内部使用
  • break / continue

    • 带标签的break

      1
      2
      3
      4
      5
      6
      7
      8
      9
      int i =1;
      outime:while(i<=100) {
      while(i<=100) {
      if(i == 22) {
      break outime;
      }
      i++;
      }
      }
    • 没有 goto 语法,标签仅限于一个循环(单/嵌套)体内部使用