类比C语言初识Java(2)

1.逻辑控制

2.方法

1.逻辑控制

  在生活中,我们遇到的所有事件都具有其逻辑。类似于C语言,在Java中,同样,我们抽象出三种逻辑:顺序逻辑,分支逻辑,循环逻辑,那么让我们一个一个进行认识。

(1)顺序逻辑

这个逻辑非常简单,它会直接按代码的先后顺序运行,当我们改变代码的位置,顺序被改变,运行出来的结果便也不同。

        int a=10;
        int b=20;
        System.out.println(a);
        System.out.println(b);

当我们调换后两行代码结果便不一样

 这就是顺序。

(2)分支逻辑if

生活中,我们经常会遇到不同的选择,当我们做出不同的选择,结果便也不尽相同。与C语言相同,Java中也是用if 、else 、else if来进行分支的书写。但与C语言不同的是,if、else if后面的括号里仅支持使用布尔型变量。即:

if(Boolean){};

同样,当有多个if时,else仅仅会与离它最近的一个if进行匹配,实际开发时,更建议把匹配起来的用大括号括起来,易于阅读,代码更加清晰。

(3)分支逻辑switch

与C语言相同,利用switch语句可以进行多分支的书写。其中要注意的是,每个case后一定要加break;不然代码会继续运行下一个case,出现严重的错误。实际开发时,我们一般建议写default语句,当表达式的值与每一个case均不符时,就会执行default语句。

与C语言不同的是,switch括号里的类型只能是:byte.char.short.int(不能是long!).字符串常量.枚举类型。

ps:比较字符串是否相等,我们采用关键字equals,具体语法是:

String1.equals(String2);

返回类型为布尔类型,一样为true,不一样为false;

(4)循环逻辑

与C语言相同,Java中同样用while、do while、for三个语句进行循环的控制。我们简单复习一下三种语句的语法。

while(条件){循环内容};

do{循环内容}while(条件);

for(初始化条件;Boolean;条件){循环内容};

同样,Java中也有关键字break和continue,break用来终止循环,continue用来终止当前循环,进行下一次循环。

2.方法

(1)方法的使用

方法是Java语法中重要的组成部分,方法,就是一个代码片段,类似于C语言中的“函数”,可以用来简化代码,简单解决问题。现阶段,我们写一个方法,可以先这么写:

public static 返回值 方法名(参数){方法内容};

这样说有些抽象,我们来举个例子:写一个方法,来计算传入参数的阶乘。

假设我们传入的参数是整形a,希望可以返回一个整型,我们就可以这么写:

public static int Fac(int a){
        int i=0;
        int sum=1;
        for(i=1;i<=a;i++){
            sum*=i;
        }
        return sum;
    }

可以看到,这和C语言中的函数非常相像,我们可以类比进行记忆。至于方法前面为什么要写public static,而public static是什么意思,我们后面都会逐步了解,现在我们只需要按这个格式去写就可以了。

值得注意的是,方法不能进行嵌套,也没有C语言当中“声明”的概念,方法可以写在main方法上下任何位置,Java都能检测到并执行。这就是Java比较于C语言的优点,它更加方便,简单,智能。

(2)方法调用过程

在这里,我们要先了解我们的内存。运行时的数据区大致分为这几个部分:

 其中虚拟机栈我们一般直接称为栈,堆比栈要大得多。今天我们先来认识方法区和栈在方法调用时起的作用。

当我们写完一个方法时,它会存储于方法区。当我们调用这个方法,首先它会向方法传递参数,之后java会去寻找这个方法的地址,找到后开始执行被调用方法的方法体,直到方法结束,我们会返回主方法继续执行。需要注意,只有当方法进行调用,该方法才会在栈上开辟栈帧,即在栈上开辟一块内存,供被调方法使用,而当方法执行遇到return或者执行结束时,我们会返回main方法,此时在栈帧上开辟的空间就没了,即“调用一次,开辟一次”。

tips:快速输出返回值:方法名(实参).sout+enter

(3)实参和形参

下面我们来讨论实参和形参的关系。

首先形参只是定义方法时需要借助的一个变量,用来接收实参的值。因此,形参叫什么并不会影星实参。那么,在Java中,形参和实参本质是两个实体。对于基础类型来说,形参是实参的一份拷贝,不能去改变实参,也就是我们通常在C语言所说的“传值调用”。这种传值调用,当我们在解决另一些问题时,是难以解决的。

例如:写一个方法,去交换a.b的值。

    public static void Swap(int c,int d){
        int tmp=0;
        tmp=c;
        c=d;
        d=tmp;
    }
    public static void main(String[] args) {
        int a=10;
        int b=20;
        Swap(a,b);
        System.out.println(a);
        System.out.println(b);
    }

在这里我们看到,好像我们成功交换了a和b的值但实际上我们只是把10和20传给了c和d,并交换了c和d,正如我们所说,形参的改变不能影响实参。

在C语言中,我们会使用“传址调用”进行解决,而Java中,我们现阶段还不能使用地址进行解决,在类和对象中我们会有进一步讲解。

(4)方法的重载

我们先看一个例子:有int a=10;int b=20;double c=10.0;doule d=20.0;四个数据,我们现在想写方法计算a和b的和,c和d的和。首先我们先写a和b的和,很简单:

 public static int AddInt(int i,int j){
        return i+j;
    }

那么这个方法能不能被用来计算c和d的和呢?很显然是不行的cd均是double类型,直接传参很可能会有数据的丢失,那么,大部分人都会再写一个新的方法:

 public static double AddDouble(double k,double l){
        return k+l;
    }

这样问题就得到解决。但在实际问题中,代码通常十分复杂,而现在两个方法仅是参数不同,就造成了方法名不同,我们取了不同且复杂的名字,本身就是难以记忆。那么,我们能不能让他们方法名一样,来便于我们记忆管理和维护呢?答案是可以,这就是方法的重载。

因此,两个代码可以这么写:

public static int Add(int i,int j){
        return i+j;
    }
    public static double Add(double k,double l){
        return k+l;
    }

两个代码方法名一样,完成的功能一样,这样就完成了方法的重载。

那么重载的条件又是什么呢?

1)方法名相同

2)参数列表不同(数据类型/个数/顺序)

3)返回值不影响重载

编译器在编译代码时,会对实参类型进行推演,根据推演的结果来确定调用哪个方法。
(5)递归
方法的递归与C语言中函数的递归完全相同,读者可去C语言处进行复习。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值