Java基础(一)

113 阅读5分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情

1.Java中break与continue关键字的区别

break和continue关键字的使用

关键字使用范围循环中使用的作用(不同点)相同点
break:switch-case 、循环结构中结束当前循环关键字后面不能声明执行语句
continue:循环结构中结束当次循环关键字后面不能声明执行语句

举例:

/**
 * @Author: YuShiwen
 * @Date: 2020/11/12 2:24 PM
 * @Version: 1.0
 */
public class BreakContinueTest {
    public static void main(String[] args) {
        //简单测试
        for (int i = 1; i < 10; i++) {
            if(i % 5 == 0){
                continue;//默认结束包裹此关键字最近的一层循环。
            }
            System.out.print(i);
        }
        System.out.println();
        for (int i = 1; i < 10; i++) {
            if(i % 5 == 0){
                break;//默认跳出包裹此关键字最近的一层循环。
            }
            System.out.print(i);
        }
        
        //带有标签的测试
        System.out.println();
        System.out.println("###################");
        System.out.println();
        
        label0:
        for (int i = 1; i < 5; i++) {
            for (int j = 1; j < 10; j++) {
                if(j % 5 == 0){
                    break label0;//结束指定标识的一层循环结构
                }
                System.out.print("j="+j);
            }
            System.out.println("i="+i);
        }

        System.out.println();
        label1:
        for (int i = 1; i < 5; i++) {
            for (int j = 1; j < 10; j++) {
                if(j % 5 == 0){
                    continue label1;//结束指定标识的一层循环结构当次循环,后面的System.out.println("i="+i);不会执行。
                }
                System.out.print("j="+j);
            }
            System.out.println("i="+i);
        }
    }
}

输出结果:

12346789
1234
###################

j=1j=2j=3j=4
j=1j=2j=3j=4j=1j=2j=3j=4j=1j=2j=3j=4j=1j=2j=3j=4
Process finished with exit code 0

2. Java数组元素的默认初始化值

  • 数组元素是整型默认初始化值为0
  • 数组元素是浮点型默认初始化值为0.0
  • 数组元素是char型默认初始化值为0或'\u0000',而非字符型'0'
  • 数组元素是boolean型默认初始化值为false
  • 数组元素是引用数据类型默认初始化值为null

代码测试:

/**
 * @Author: YuShiwen
 * @Date: 2020/11/12 7:14 PM
 * @Version: 1.0
 */
public class ArrayTest {
    public static void main(String[] args) {

        //整型默认初始化值为0
        int[] arr = new int[3];
        for (int i : arr) {
            System.out.print(i);
        }
        System.out.println();
        byte[] arr1 = new byte[3];
        for (byte b : arr1) {
            System.out.print(b);
        }
        System.out.println();
        short[] arr2 = new short[3];
        for (short i : arr2) {
            System.out.print(i);
        }
        System.out.println();


        //浮点型默认初始化值为0.0
        float[] floats = new float[3];
        for (float aFloat : floats) {
            System.out.print(aFloat);
        }
        System.out.println();
        double[] doubles = new double[3];
        for (double aDouble : doubles) {
            System.out.print(aDouble);
        }
        System.out.println();

        //char型默认初始化值为0或'\u0000',而非字符型'0'
        char[] chars = new char[3];
        for (char aChar : chars) {
            System.out.print(aChar);
        }
        System.out.println();
        if(chars[0] == 0){
            System.out.println("char型默认初始化值为0或'\\u0000',而非字符型'0'");
        }

        //boolean默认初始化值为false
        boolean[] booleans = new boolean[3];
        for (boolean aBoolean : booleans) {
            System.out.print(aBoolean);
        }
        System.out.println();

        //引用数据类型为null
        String[] strings = new String[3];
        for (String string : strings) {
            System.out.print(string);
        }
    }
}

测试结果:

000
000
000
0.00.00.0
0.00.00.0

char型默认初始化值为0'\u0000',而非字符型'0'
falsefalsefalse
nullnullnull
Process finished with exit code 0

3.Java中属性(成员变量)与局部变量的区别

相同点:

  • 定义变量的格式:数据类型 变量名 = 变量值 ;
  • 先声明,后使用
  • 变量都有其对应的作用域

不同点:

  • 在类中声明的位置的不同 属性:直接定义在类的一对{}内 局部变量:声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量
  • 关于权限修饰符的不同 属性:可以在声明属性时,指明其权限,使用权限修饰符。 常用的权限修饰符:private、public、缺省、protected 目前,大家声明属性时,都使用缺省就可以了。 局部变量:不可以使用权限修饰符。
  • 默认初始化值的情况:
  1. 属性:类的属性,根据其类型,都有默认初始化值。 整型(byte、short、int、long):0 浮点型(float、double):0.0 字符型(char):0 (或'\u0000') 布尔型(boolean):false

    引用数据类型(类、数组、接口):null

  2. 局部变量:没有默认初始化值。 意味着,我们在调用局部变量之前,一定要显式赋值。 特别地:形参在调用时,我们赋值即可。

  • 在内存中加载的位置: 属性:加载到堆空间中 (非static) 局部变量:加载到栈空间

4.Java中可变个数形参

  • jdk 5.0新增的内容
  • 具体使用: 可变个数形参的格式:数据类型 ... 变量名 当调用可变个数形参的方法时,传入的参数个数可以是:0个,1个,2个,。。。 可变个数形参的方法与本类中方法名相同,形参不同的方法之间构成重载 可变个数形参的方法与本类中方法名相同,形参类型也相同的数组之间不构成重载。换句话说,二者不能共存。 可变个数形参在方法的形参中,必须声明在末尾 可变个数形参在方法的形参中,最多只能声明一个可变形参。
import java.util.Arrays;

/**
 * @Author: YuShiwen
 * @Date: 2020/11/14 11:04 AM
 * @Version: 1.0
 */
public class MethodTest {

    public void show(String ... str){
        System.out.println(Arrays.toString(str));
    }

    //以下被注释起来的方法都是错误例子
//    //可变个数形参的方法与本类中方法名相同,形参类型也相同的数组之间不构成重载。换句话说,二者不能共存。
//    public void show(String[] str){
//        System.out.println(Arrays.toString(str));
//    }

//    //可变个数形参在方法的形参中,必须声明在末尾
//    public void show(int i,int ... j,String s){
//
//    }

//    //可变个数形参在方法的形参中,最多只能声明一个可变形参。
//    public void show(int ... i,String ... str){
//
//    }

    public static void main(String[] args) {
        MethodTest MethodTest = new MethodTest();
        MethodTest.show();
        MethodTest.show("abc");
        MethodTest.show("abc","def,ghi");

    }
}

输出结果:

[]
[abc]
[abc, def,ghi]

Process finished with exit code 0