Java知识复习(基础知识)

学习Java一个多月了,对之前的内容做一下复习。
以下内容参考了《Java编程思想 第四版》 和《疯狂Java 第二版》 的内容。

1.用引用操纵对象

  • 一切都被视为对象,但操纵的标识符实际上是对象的一个“”引用“”(reference)。如 String s; 这里所创建的只是引用,并不是对象。

2.必须由你创建所有对象

  • 一旦创建了一个引用,就希望他能与一个新的对象相关联。new关键字的意思是“”给我一个新对象“”。
  • String s = new String("asdf");

3.基本数据类型

基本类型 大小 默认值 包装器类型
boolean false Boolean
char 16-bit ‘\u0000’ Character
byte 8 bits (byte)0 Byte
short 16 bits (short)0 Short
int 32 bits 0 Integer
long 64 bits 0L Long
float 32 bits 0.0F Float
double 64 bits 0.0D Double

4.引用数据类型

  • 类,数组,接口 默认值为:null

5.作用域

  • 作用域决定了在其内定义的变量名的可见性和生命周期,作用域由花括号的位置决定。如:
{
    int x = 10;
    //x可见
    {
        int y =5;
        //x , y 都可见 
    }
    //x 可见  ,  y不可见
}

6.标识符和关键字

分号 ;
分号作为语句的分隔。每个Java语句必须使用分号作为结尾。
花括号 {}
花括号的作用就是定义一个代码块。
方括号 []
方括号的主要作用是用于访问数组元素,方括号通常紧跟数组变量名,而方括号里指定希望访问的数组元素的索引。
圆括号()
定义方法时必须使用圆括号来包含所有的形参声明,调用方法时也必须使用圆括号来传入实参值。
圆括号还可以作为强制类型转换的运算符。
圆括号可以将表达式某个部分括成一个整体,保证这个部分优先计算。
空格
Java语言使用空格分隔一条语句的不同部分。
圆点
通常用作类/对象和它的成员之间的分隔符,表明调用某个类或某个实例的指定成员。

标识符规则

  • 标识符可以由字母、数字、下划线、和美元符($)组成,其中数字不能打头。
  • 标识符不能是Java关键字和保留字,但可以包含关键字和保留字。
  • 标识符不能包含空格。
  • 标识符只能包含美元符,不能包含@#等其他特殊字符。

Java关键字

  • Java语言中一些具有特殊用途的单词被称为关键字,所有的关键字都是小写的。
1 2 3 4 5 6
abstract assert boolean break byte case
catch char class continue default do
double else enum extends final finally
float for if implements import int
interface instanceof long native new package
private protected public return short static
strictfp super switch synchronized this throw
throws transient try void volatile while

7.运算符

算术运算符

  • Java支持所有的基本算术运算符:
  • +:加法运算符(+还可以用作字符串的连接运算符)
        double a = 6.3;
        double b = 2.1;
        double c = a + b;//c的值为 8.4
  • -:减法运算符
        double a = 6.3;
        double b = 2.1;
        double c = a - b;// c的值为 4.2
  • *:乘法运算符
        double a = 6.3;
        double b = 2.1;
        double c = a * b;// c的值为 13.23
  • /:除法运算符,两个操作数都是整型,则除数不可以是0;有一个是浮点数或者两个都是浮点数,则除数可以是0或0.0 , 结果为正无穷或负无穷。
        double a = 6.3;
        double b = 1.2;
        double c = a / b;// c的值为 5.25

        int x = 8;
        int y = 3;
        int k = x / y;// k 的值为2
  • &:求余运算符
        double a = 6.3;
        double b = 2.0;
        double c = a % b;// c的值为 0.3

        int x = 8;
        int y = 3;
        int k = x % y;// k 的值为2
  • ++、–:自加、自减;前缀,先执行运算,再生成值。后缀,先生成值,再执行运算。
        int i = 1;
        System.out.println("i=" + i);//i=1
        System.out.println("++i = " + ++i);//++i = 2
        System.out.println("i++ =" + i++);//i++ =2
        System.out.println(" i =" + i);// i =3
        System.out.println("--i =" + --i);//--i =2
        System.out.println("i-- =" + i--);//i-- =2
        System.out.println("i = " + i);//i = 1

关系操作符

  • >,<,<=,>=,==,!=;关系操作符生成的是一个boolean结果,他们计算的是操作数的值之间的关系。(== !=比较的是对象的引用)

逻辑运算符

  • &&:与,前后两个操作数必须都是true才返回true,否则返回false;
  • &:不短路与,作用与&&相同,但不会短路;
  • ||:或,只要两个操作数有一个为true,则返回true,否则返回false;
  • |:不短路或,与||作用相同,但不会短路;
  • !:非,操作数为true返回false,操作数为false返回true;
  • ^:异或,两个操作数不同时返回true,相同时返回false;

三元操作符

  • 如果逻辑表达式返回true,则返回前一个表达式的值,否则返回后一个表达式的值:
        String string = 5 > i ? "5大于i" : "5不大于i";
        System.out.println(string);
  • 大部分时候三元运算符为 if else 的精简写法:
        String str = "";
        if (5 > i) {
            str = "5大于i";
        } else {
            str = "5不大于i";
        }
        System.out.println(str);

8.流程控制

8.1分支结构

  • if语句与switch语句,一般switch用于等值判断,多重if用于区间判断;switch结构必须使用break才能跳出,多重if只要满足某个条件执行完相应的代码后会自动跳出。

if条件语句

  • if语句使用布尔表达式或布尔值作为分支条件来进行分支控制,if语句有三种方式:
        int num=new Random().nextInt(10);
        if(num>5){
            System.out.println("num>5");
        }
        System.out.println("...");
        int num=new Random().nextInt(10);
        if(num>5){
            System.out.println("num>5");
        }else{
            System.out.println("num<=5");
        }
        int num = new Random().nextInt(10);
        if (num > 5) {
            System.out.println("num>5");
        } else if (num > 3) {
            System.out.println("num>3&&num<=5");
        } else if (num > 0) {
            System.out.println("num>0&&num<=3");
        } else {
            System.out.println("num==0");
        }

switch分支语句

  • switch语句后面的控制表达式的数据类型只能是byte,short,char,int四个整数类型和枚举类型,Java1.7之后允许String类型。
        int num2 = new Random().nextInt(3);
        switch (num2) {
        case 0:
            System.out.println("num2=0");
            break;
        case 1:
            System.out.println("num2=1");
            break;
        case 2:
            System.out.println("num2=2");
            break;
        default:
            System.out.println("...");
            break;
        }

8.2循环结构

  • 循环体如果只有一条语句,可以省略花括号;

while循环

  • while循环先判断再执行循环,当循环条件不满足时,循环一次都不执行。
        int count=0;
        while(count<5){
            System.out.println(count);
            count++;
        }
        System.out.println("循环结束");
  • 死循环情况
        int count=0;
        //死循环
        while(count<5){
            System.out.println(count);
            count--;
        }
        System.out.println("循环结束");

do while 循环

  • 先执行,再判断。安全性不高,当循环条件不成立时,循环至少执行一次。
        int count2 = 0;
        do {
            System.out.println(count2);
            count2++;
        } while (count2 < 5);
        System.out.println("循环结束");

for循环

  • 先判断,在执行。
        for (int i = 0; i < 10; i++) {
            System.out.println(i);
        }
        System.out.println("循环结束");
  • for循环允许同时指定多个初始化语句,循环条件也可以是一个包含逻辑运算符的表达式。
        for (int a = 0, b = 0, c = 0; a < 4 && b < 4 && c < 7; a++) {
            System.out.println(a++);
            System.out.println(b++);
        }
  • for循环还可以把初始化条件定义在循环体之外,把循环迭代语句放在循环体内,不过这样就非常类似while循环。
        int count = 0;
        for (; count < 5;) {
            System.out.println(count);
            count++;
        }
        System.out.println("循环结束");

foreach循环

  • foreach循环操作数组和集合时更加方便
        int[] is = new int[5];
        for (int i = 0; i < 5; i++) {
            is[i] = new Random().nextInt(10);
        }
        // foreach循环
        for (int i : is) {
            System.out.println(i);
        }

循环嵌套

  • 循环嵌套既可以是for循环嵌套while循环,也可以是while循环嵌套do while循环等等…各种类型的循环都可以作为外循环,也可以作为内循环。
        // 外层循环
        for (int i = 0; i < 5; i++) {
            // 内层循环
            for (int j = 0; j < 5; j++) {
                System.out.println("i=" + i + ",,,j=" + j);
            }
        }

使用break结束循环

  • break用于完全结束一个循环,跳出循环体;
        /**
         * output: i=0 i=1 i=2 i=3 i=4 i=5
         * 
         */
        for (int i = 0; i < 10; i++) {
            System.out.println("i=" + i);
            if (i == 5) {
                break;
            }
        }

使用continue结束本次循环

  • continue只是终止本次循环,接着开始下一次循环。
        /**
         * output: i=0 i=1 i=2 i=4
         */
        for (int i = 0; i < 5; i++) {
            if (i == 3) {
                continue;
            }
            System.out.println("i=" + i);
        }

使用return结束方法

  • return的功能是结束一个方法。
        /**
         * output:i=0 i=1 i=2
         */
        for (int i = 0; i < 5; i++) {
            if (i == 3) {
                return;
            }
            System.out.println("i=" + i);
        }

9.Java的注释

  • 单行注释://后面的都是注释内容
  • 多行注释:/* 中间的都是注释内容/
  • 文档注释:/** 中间的都是注释内容/ 生成Java api 文档

10.类型转换

  • 自动类型转换:小–>大
    • 多个变量做算术运算时,最终表达式的值的类型会和这几个变量类型最大的一致。
    • byte–>short–>int–>long–>float–>double
  • 强制类型转换:大–>小
        double b=2.0;
        int a=(int)b;

11.数组

  • 理解数组:数组也是一种类型,数组是引用类型。
  • Java数组要求所有的数组元素具有相同的数据类型,即一个数组里只能存储一种数据类型的数据。
  • Java数组既可以存储基本类型的数据,也可以存储引用类型的数据。

定义数组

        type [] arrayName;
        type arrayName[];
  • 使用第一种具有更好的语意,具有更好的可读性。

数组的初始化

  • 静态初始化
        int[] is;
        // 使用静态初始化,初始化数组只指定数组元素的初始值,不指定数组长度
        is = new int[] { 1, 2, 4, 5, 7, 56 };
        Object[] obj1;
        // 使用静态初始化,初始化数组的数组元素类型是定义数组时数组元素的子类
        obj1 = new String[] { "as", "ada" };
        // 数组的定义和初始化同时完成
        int[] a = new int[] { 1, 4, 6, 7 };
        // 简化的静态初始化写法
        int[] b = { 3, 4, 5, 6, 6 };
  • 动态初始化
        // 动态初始化数组长度
        int[] nums = new int[10];
        // 给每个数组元素分配初始值
        for (int i = 0; i < nums.length; i++) {
            nums[i] = i;
        }
  • 注意:不要同时使用静态初始化和动态初始化,就是不要在数组初始化时,既指定数组的长度,也给每个数组元素分配初始值。
  • 数组引用变量只是一个引用,这个引用变量可以指向任何有效的内存,只有当该引用指向有效内存后,才可以通过该数组变量来访问数组元素。

操作数组的工具类

  • Arrays类 , 具体方法参考api;

你可能感兴趣的:(Java复习,java)