Java-SE-语法篇-2

一,逻辑控制

JAVA中的for循环,while循环,swich语句等于C语言的使用方法基本一致,要强调有两点:

1. while,for等循环中的控制条件必须是布尔表达式,否则报错,本质上还是布尔类型无法与其他类型进行转换,例如:

 2. switch语句中的switch()的括号中只能是以下类型:

基本类型:byte、char、short、int,注意不能是long,float,double类型。

引用类型:String常量串、枚举类型。

否则会报如下错误,例如:

 二,方法的创建与使用

2.1方法的模板

JAVA中的方法就是C语言中所说的函数,但JAVA中的方法定义比C语言更加复杂,模板如下:

修饰符  返回值类型  方法名称([参数类型 形参 ...]) {
         方法体代码;
         [return 返回值];
}

这里的修饰符指的是:访问限定符和静态修饰符(初识阶段先使用 public  static修饰),其他与C语

言相同。例如:

public class Test {
    public static int max(int a, int b){

        int c = a > b ? a : b;

        return c;
    }
    public static void main(String[] args) {

        int ret = max(1,2);

        System.out.println("较大值为:" + ret);
    }
}

2.2方法的重载

那么什么是方法的重载?在JAVA中如果两个方法的方法名相同但方法的参数列表不同(与返回值类

型无关),那么在这两个方法之间构成方法的重载。这里说的参数列表不同指的是:1.参数的数量

不同 2.参数的类型不同 3.参数的顺序不同,以上三个条件至少满足一个就行。例如:

public class Test {
    //sum构成重载
    public static int sum(int a, int b){
        return a + b;
    }
    //参数的类型不同
    public static double sum(double a, double b){
        return a + b;
    }
    //参数的数量不同
    public static int sum(int a, int b, int c){
        return a + b + c;
    }
    
    //mul构成重载
    //参数的顺序不同
    public static double mul(double a, float b){
        return 1.0;
    }
    public static double mul(float a, double b){
        return 2.0;
    }
}

那么JAVA是如何知道我们需要调用的使哪个方法呢?答案很简单,当我们使用这些方法的时候,

我们会给方法传参,JAVA会自动识别我们所传数据的类型和顺序,并拿去与重载的方法比较,

哪个符合就调用哪个方法。这也从侧面说明为什么方法的重载需要方法名相同而参数列表不同。

知道了方法重载的构造与使用,有的同学就会问了,方法的重载有什么用呢?

方法的重载使程序员不必去记很多的方法名,例如当我们写了一个整形加法运算,如果我们下一次

要运算浮点数的加法就需要重新命名,而重载解决了这一问题。

三,数组

3.1数组的创建与初始化

数组的定义:相同类型元素的一个集合

注意JAVA中的数组与C语言中的数组有较大的区别,请认真阅读以下内容:

public class Test {
    public static void main(String[] args) {

        /**
         * 动态初始化
         */
        int[] array1 = new int[10];
        /**
         * 静态初始化
         */
        int[] array2 = new int[]{1,2,3,4,5,6};
        //看似省略了new int[],实际上编译器编译时会自动加上
        int[] array3 = {1,2,3,4,5,6};
        //可以分为两步写
        int[] array4;
        array4 = new int[10];

        int[] array5;
        array5 = new int[]{1,2,3,4,5};
        /**
         * 错误写法
         * int[] array4 = new int[3]{1,2,3};
         * int[] array5 = new int[];
         * 不能这样初始化
         * int array = new int[10];
         * array = {1,2,3,4,5,6,7,8,9,0};
         */
    }
}

如果没有对数组进行初始化,数组内的元素会有默认值,如下:

类型默认值
byte0
char/u0000
short0
int0
long0
float0.0f
double0.0
booleanfalse
引用类型null

虽然在JAVA中也可以像C语言那样定义数组,但是不建议,因为JAVA认为int[] 也是一种类型,应该与int 这些类型一样,直接 类型+变量名 来定义。

3.2数组的使用

与C语言相同,在JAVA中数组的元素是通过下标来访问的,从0下标开始。下面我们用两种方式来

遍历一下数组:

public class Test {

    public static void main(String[] args) {
        int[] array = new int[]{1,2,3,4,5,6,7,8,9,0};
        //在JAVA中可以通过 数组名.length 来获得数组的长度
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + " ");
        }
        System.out.println();
        //叫做 加强for循环,前一个参数是数组元素的类型,后一个参数是数组名
        for (int x: array) {
            System.out.print( x + " ");
        }
    }
}

3.3数组是一种引用类型

上面也说到了数组中引用类型的默认值是null , 那么到底什么是引用类型?其实非常简单,如果一

个变量存储的是一个地址,那么它就是引用类型(与C语言中的指针十分类似)。在C语言当中,一个

单独的数组名代表该数组首元素的地址,而在JAVA中,数组名代表一个数组的地址(不区分是数

组首元素地址还是整个数组的地址),如下图表示:


 数组会在堆上开辟的空间来存储数组的元素,在虚拟机栈上开辟一个空间来存储地址,指向在堆

上开辟的位置。

3.4作为函数的参数 

public class Test {

    public static void change(int[] a){
        a[0] = 10;
    }

    public static void main(String[] args) {
        int[] array = new int[]{1,2,3,4,5};
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i]+" ");
        }

        System.out.println();

        change(array);
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i]+" ");
        }
    }
}

 

 3.5作为函数的返回值

一般来说,在C语言中,如果返回数组(即地址),因在函数上创建的数组变量的销毁,存储数组

的空间也会被销毁,main函数中得到的就是一个野指针,因为它指向的空间可能被别人占用,而

在JAVA中,方法的销毁不会影响存储在堆上的数据,决定堆上数据是否销毁的是------还有没有人

引用该位置,因此在JAVA中可以返回数组。例如:

public class Test {

    public static int[] abc(){
        int[] a = new int[]{5,4,3,2,1};
        return a;
    }

    public static void main(String[] args) {
        int[] array = abc();
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i]+" ");
        }
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一叶祇秋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值