Java入门笔记(三)数据类型与基本语法

Java入门笔记目录

数据类型与变量

变量和标识符

  1. 变量声明和赋值与C++一致,注意float

  2. 标识符:字母、数字、下划线、美元符号组成,不可以用数字开头

  3. Java书写习惯:类名首字母大写;包名、方法名、变量名都要小写(camel);少用下划线;常量随用随定义

数据类型

  数据类型决定数据的存储方式和运算方式

  Java中的数据类型分为两大类:基本数据类型和引用类型

基本数据类型 primitive types

  1. 数值型(整数、浮点数)、字符型、布尔型 byte short int long(8字节) float double boolean char(null)

  2. 基本数据类型变量存储在栈中

  3. 赋值时,复制的是值

整型
  1. byte 1字节 -128-127

  2. short 2字节 \(-2^{15}\) ~ \(2^{15}-1\)

  3. int 4字节 \(-2^{31}\) ~ \(2^{31}-1\)

  4. long 8字节 \(-2^{63}\) ~ \(2^{63}-1\)

  整数:8进制0开头,16进制0x开头 二进制0b开头

  java中没有无符号数,如果想要正整数,可以用long模拟

浮点数
  1. float单精度 4字节 -3.403E38 ~ 3.403E38

  2. double双精度 8字节 -1.798E308 ~ 1.798E308

  3. 千分位可以用下划线表示,如123_456.789_000

  4. 科学记数法:1.14E2

  5. 浮点类型默认为double类型,如果想要声明float类型变量,需要在后面添加一个f,如float d = 3.14f

布尔类型 boolean

  boolean只允许true或false

  不可以用0或者非零的值代替

字符 char

  Java字符采用Unicode编码,每个字符占两个字节

  可用16进制编码表示,如char c1='\u0061'

引用类型 reference type

  1. 类(class)、接口(interface)、数组

  2. 变量引用在堆中,栈中其实是一个指针

  3. 赋值时,复制的是引用,没有复制对象本身

运算符与表达式

运算符

  1. 算术运算符 + - * / % ++ --,和 C++都一样

  2. 关系运算符 < > <= >= == !=,和 C++都一样

  3. 逻辑运算符 ! & | ^ && ||,和 C++都一样

    p.s. 短路与、短路或两个运算符,如果第一个表达式可以得到判断结果,不会进行后方的表达式的计算

  4. 位运算符 & | ^ ~ >> << >>>,和 C++都一样

    (1) 左移 <<:将二进制形式的a逐位左移b位,最低位补0

    (2) 右移 >>:将二进制形式的a逐位右移b位,最高位空出的位补原来的符号位

    (3) 无符号右移 >>>:右移最高位补0

    移位运算符对于低于int型的操作数会先自动转为int(整型提升)

    p.s. 虽然java没有无符号这一说,但是无符号右移运算很重要,使用Integer.toBinaryString()转化成二进制字符串检查

  5. 赋值运算符 =

    当=两侧数据类型不一致时,可以使用默认类型转换或者强制类型转换

    扩展赋值运算符 += -= *= /=等

  6. 字符串连接运算符 +

    当+两侧只要有一个是字符串类型,其他数据都会被自动转换为字符串类型

表达式

  1. 运算优先级与结合性(尽量用括号)

结合性 | 操作符

  • | -   |
    

R-L | ++, --, ~, !, (类型转换)
L-R | *, /, %
L-R | +, -
L-R | <<, >>, >>>
L-R | <, >, <=, >=, instanceof
L-R | ==, !=
L-R | &
L-R | ^
L-R | |
L-R | &&
L-R | ||
R-L | ?:
R-L | =, *=, /=, ...

  1. 类型转换

    整型提升:byte short char参与运算转为int

注释

  1. //:单行注释

  2. /.../:多行注释,不能嵌套

  3. /**...*/ doc注释,可以用来生成文档

    • @see:引用其他类
    • @version:版本信息
    • @author:作者信息
    • @param:参数说明
    • @return:说明
    • @exception:异常说明

流程控制语句

顺序

  1. 简单语句:方法调用语句、赋值语句等,记得加分号

    没有表达式语句 如 x+y;

分支

  和C++一样

if语句

if(){
    语句;
}
else{
    语句;
}

// 最多两个分支,可以else if

switch语句

  变量类型是数数、字符、字符串

  case后面的value得是常量

switch(var){
    case value1:
        语句1;
        break;
    case value12:
        语句2;
        break;
    ...
    default:
        语句;
        break;
}

循环

  和C++一样

  for,while,do while

for(初始条件; 终止条件; 循环操作){ 语句}

while(循环条件){ 语句 }

do{ 语句 }while(循环条件);

在循环中,可以使用标签来控制bbreak和continue跳出的位置

lable1: {
lable2:    {
lable3:        {
                    break label2;
                }
            }
        }

数组

一维数组

int[] a = new int[]{3,4,5};
// 不要写int[] a = new int[3]{3,4,5}

Person[] p = new Person[]{new Person(1), new Person(2), new Person(3)};

int[] a = new int[3];
a[0] = 3;
a[1] = 4;
a[2] = 5;
  1. 数组需要使用new分配空间后使用,在java中,C++的int a[5];写法是不对的,因为java中的数组只是一个引用,引用堆中的五个元素空间

  2. 数组一经分配空间,每个元素也被按照成员变量同样的方式被隐式初始化,数值类型初始化为0,引用类型为null

  3. 数组分配空间后,大小固定,有一个length属性来指明长度,如a.length,C++中没有大小

  4. 数组遍历:for(int age : ages),ages数组中的每一个元素age,这是只读式的遍历,不能赋值

  5. 数组的复制:System.arraycopy(source, start_index, dest, target_index, source.Length)

二维数组

int [][] a = {{1,2}, {3,4,0,9}, {5,6,7}};

int [][] m = new int[3][5];

int [][] t = new int[3][];
t[0] = new int[2];
t[1] = new int[4];
t[2] = new int[3];

posted @ 2020-04-29 17:13  陌良  阅读(241)  评论(0)    收藏  举报