900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 菜鸟学习笔记:Java基础篇2(变量 运算符 流程控制语句 方法)

菜鸟学习笔记:Java基础篇2(变量 运算符 流程控制语句 方法)

时间:2022-08-07 15:33:53

相关推荐

菜鸟学习笔记:Java基础篇2(变量 运算符 流程控制语句 方法)

菜鸟学习笔记:Java基础篇2

变量基本概念变量作用域final关键字运算符算术运算符比较运算符逻辑运算符位运算符赋值运算符条件运算符运算符优先级Java三种流程控制语句顺序结构选择结构if-else语句switch语句循环结构while循环do…while循环for循环break和continue语句方法基本方法介绍Main方法

变量

基本概念

学过C语言的同学对变量这个概念应该不陌生,它是程序中最基本的存储单元,其要素包括变量名、变量值作用域

int a, b, c; // 声明三个int型整数:a、 b、cint d = 3, e = 4, f = 5; // 声明三个整数并赋予初值String s = "apple"; // 声明并初始化字符串 sdouble pi = 3.14159; // 声明了双精度浮点型变量 pichar x = 'x'; // 声明变量 x 的值是字符 'x'。

在Java中对变量有几点需要注意一下:

Java是一种强类型语言,声明变量时必须定义好类型。变量名必须合法。按变量存储值类型划分可以把变量分为基本类型变量引用类型变量

变量作用域

对于在作用域里定义的变量,作用域同时决定了它的“可见性”以及“存在时间”。在JAVA里,作用域是由花括号的位置决定的。JAVA用一对大括号作为语句块的范围,称为作用域,在作用域里定义的变量,只有在该作用域结束之前才可使用。 在JAVA中,变量的作用域分为四个级别:类级、对象实例级、方法级、块级

类变量也称为静态变量,对应类级作用域,在类中通过static关键字修饰。一个类对应一份类变量,在完成类加载后类变量就存在,不需要实例化类就可以使用,可以通过类名直接访问。

成员变量也称为实例变量,对应对象实例级作用域。它是在对应类实例化一个对象后才会存在,随着对象的销毁而销毁,通过对象名进行访问。

局部变量就是方法中定义的变量,随着方法的执行而创建,在方法结束后立即销毁。

public class test{static int iClassVariables=0; // 类变量String str="hello"; // 成员变量public void method(){int i =0; // 局部变量(方法级)if(i==0){int j = 1; // 局部变量(块级)}}}

变量作用域这一块涉及到很多面向对象方面的知识,如果没有相关基础可以先记一下,等学完面向对象后再回来巩固就很简单了。

final关键字

可以在变量定义时用final进行修饰,表示该变量仅可以赋值一次。

final double PI = 3.1415926;// 之后对pi值进行修改会报错

通常用来定义程序中所用到的常量,并且习惯上变量名用大写字母表示,多个字母之间用’_'隔开。

final double MAX_SIZE = 500;

运算符

算术运算符

加减乘除取余操作很好理解,自增自减操作分为前缀自增自减法(++a,–a)和 后缀自增自减法(a++,a–)两种,前者先进行自增或者自减运算,再进行表达式运算,而后者先进行表达式运算,再进行自增或者自减运算 。

public static void main(String[] args){int a = 5;//定义一个变量;int b = 5;int x = 2*++a; //a先自增为6,然后参与运算,x为12int y = 2*b++; //b先参与运算,在自增为6,y为10}

比较运算符

比较运算符的返回值为boolean类型的值,表达式成立为true,不成立为false,比较简单这里不再赘述。

逻辑运算符

与比较运算符相同返回值为boolean类型的值,这里不再赘述。注意逻辑与与逻辑或采用短路的方式,如果确定值则不会在计算下去。

boolean c = 1>2 && 2>(3/0); //1>2为false,与运算结果为false,不再执行后面的语句,所以不会抛出异常。

位运算符

在进行位运算时,需要先把变量用二进制数进行表示,然后按照位逐一进行比较,将每一位比较的结果同样按位拼接组成整个表达式的结果。

public static void main(String[] args) {int a= 10;int b = 20;//a转化成二进制表示为:1010;b转化为二进制表示为:10100//按位运算时,我们把a表示为:01010System.out.println(a&b);//按位与运算,有零则为零,都为1则表示为1,与的结果为:00000,即十进制的0System.out.println(a|b);//按位或运算,有1则为1,都为0则表示为0,或的结果为:11110,即十进制的30System.out.println(a^b);//按位或运算,对应位置相同则为0,否则为1,取反的结果为:11110,即十进制30}

位运算笔试面试题当中出现的频率很高,需要大家在准备面试过程中着重加强。

赋值运算符

基本的赋值运算符是’=’,表示的含义时将‘=’后的表达式计算结果赋值给表达式前的变量。

//两变量值互换int a=2,b=3,c=4;int tmp = a ;a = b;b = tmp;

其他的赋值运算符是为了简化书写将’='和其他类的运算符结合,又称为带有运算的赋值运算符,也叫赋值缩写。

条件运算符

(条件) ? 结果一 : 结果二;

也叫做三目运算符,可以理解为简写if语句。

if(a<b)min=a;elsemin=b;//等价于min = a<b ? a : b;

运算符优先级

通常优先级由高到底的顺序依次是:

括号 > 单目 > 算术 > 位移 > 关系 > 逻辑 > 三目 > 赋值 > 逗号。

在相同优先级运算符中,除了单目运算符、赋值运算符和条件运算符是从右往左结合,其他的运算符都是从左到右结合的。在实际开发过程中,建议大家使用小括号来决定计算顺序。

Java三种流程控制语句

顺序结构

这是程序的默认执行方法,程序按行从上到下依次执行,当遇到异常或者中短的情况停止执行。

System.out.println(1);System.out.println(2);int a = 1/0;System.out.println(3);//程序会打印出1、2,执行到1/0处出错抛出异常。最后一句打印不会执行。

选择结构

if-else语句

if(关系表达式){语句体; }

执行流程:

1.计算关系表达式的值,看结果是true还是flase;

2.若是true则执行语句体;

3.若是flase则不执行语句体;

或者

if(关系表达式1){语句体1; }else if(关系表达式2){语句体2;}else {语句体3;}

执行流程:

计算关系表达式1的值,看结果是true还是flase,若是true则执行语句体1,若是flase则判断关系表达式2的值,若是true执行语句体2 ,否则执行语句体3。

String sPerson = "Chinese";if(sPerson=="English"){System.out.println("hello");}else if(sPerson == "Chinese"){System.out.println("你好");}else{System.out.println("*&*&*&%*%%$^");}

switch语句

switch语句格式:switch(表达式){case 值1:语句体1;break;case 值2:语句体1;break;......default:语句体n+1;break;}

执行流程:

1.计算表达式的值;

2.将得到的值依次与case后的值进行匹配,一旦匹配成功则执行相应的语句体,遇到break则结束;

3.若是都不匹配,则执行语句体n+1,遇到break则结束;

String sPerson = "Chinese";switch(sPerson){case "Chinese":System.out.println("你好");break;case "English":System.out.println("Hello");break;default:System.out.println("*&*&*&%*%%$^");break;}

这里注意每句case后的break是必须要的,否则会从判断成立处的case语句开始执行下去,不再进行判断。比如上例中如果没有case,会依次打印“你好”、“hello”和“&&&%%%$^”。还有在JDK7以后,switch中的表达式可以为字符串。所以在低版本JDK中运用时需要注意。

循环结构

while循环

while循环语句的格式:

while(判断条件语句){循环体语句;控制条件语句;}

执行流程:

1.执行判断条件语句;

2.执行循环体语句;

3.执行控制条件语句;

4.回到1在开始执行,直至不符合控制条件语句.

//等差数列{1,3,5,7,9}求和int sn = 0;int a = 1;//首项int d = 2;//公差while(i<=10){sn+=a;a+=d;}System.out.println("前n项和为:"+sn);

do…while循环

do…while循环语句的格式:

do{循环体语句;控制条件语句;}while(判断条件语句);

执行流程:

1.执行循环体语句;

2.执行控制条件语句;

3.执行判断条件语句;

4.回到1在开始执行,直至不符合控制条件语句.

//等差数列{1,3,5,7,9}求和int sn = 0;int a = 1;//首项int d = 2;//公差do{sn+=a;a+=d;}while(i<=10);System.out.println("前n项和为:"+sn);

for循环

for循环语句的格式:

for(初始化语句;判断条件语句;控制条件语句){循环体语句;}

执行流程:

1.执行初始化语句;

2.执行判断条件语句;

3.执行循环体语句;

4.执行控制条件语句;

5.回到2在开始执行,直至不符合控制条件语句.

//等差数列{1,3,5,7,9}求和int sn = 0;int a = 1;//首项int n = 5; //项数int d = 2;//公差for(int i = 0; i < n; i++){sn+=i;i+=d;}System.out.println("前n项和为:"+sn);

需要注意的有两点:

do…while循环至少可以执行一次循环体,for和while循环只有在判断条件成立才可以执行循环体。for循环结束后初始化的变量(也就是i)不能继续使用,可以认为i是for循环大括号内的局部变量,而while循环结束后初始化的变量可以继续使用。

break和continue语句

break语句和continue语句主要用于循环体中,对循环进行特殊操作。break也可用于switch语句中,在之前已有讲解。

break语句用于强制退出循环。常用于死循环的跳出。

//等差数列{1,3,5,7,9}求和int sn = 0;int a = 1;//首项int d = 2;//公差while(true){sn+=a;a+=d;if(i>10){break;}}System.out.println("前n项和为:"+sn);

continue语句用于终止某次循环过程,跳过某次执行,直接进行下一次判定。

//等差数列{1,3,5,7,9}求和int sn = 0;for(int i = 0; i < 10; i++){if(i%2==0){continue;}sn+=i;i+=d;}System.out.println("前n项和为:"+sn);

continue还可以在多重循环中指定跳转的位置(比较少用,但笔试面试可能会考):

retry:for (i = 0; i < 2; i++) {for (j = 0; j < 5; j++) {System.out.println(j);if (j == 3) {continue retry; //此处会直接跳转到retry处执行}}}

方法

基本方法介绍

学过C语言的同学对函数这个概念比较属性,Java中的方法与之类似,表示用于实现特定功能的一部分代码块。

定义方法的基本格式:

修饰符 返回值类型 方法名称(参数1类型 参数1名称, 参数2类型 参数2名称,...){方法体return返回值;}

修饰符包括公共类修饰符:(公共访问控制符public、私有访问控制符private等)和非访问控制符(抽象类修饰符 abstract 、最终类修饰符 final等)这些内容会在讲解面向对象时详细介绍。

返回值类型类型表示方法最终产生的结果数据是什么类型。

方法名称是用来代表这个方法的自定义的名称,命名规则和变量一样。

参数类型指形式参数的类型。

参数名称指形式参数的名称。

方法体表示方法内部执行的若干行代码。

return的作用是结束方法的执行,并且将返回值返还给调用处。

返回值表示方法最终产生的结果数据,注意return的数据类型要与返回值类型一致

这里盗取一段比较好的例子,链接: 作者请原谅我。。。.

public class MethodReturn {public static void main(String[] args) {//==========有返回值=============//单独System.out.println("返回值是:");getSum(13,56);//打印System.out.println("返回值是:" + getSum(12,25));//赋值int c = getSum(15,46);System.out.println("返回值是:" + c);System.out.println();//===========无返回值==============printSum(12,13);}//我是一个方法,我负责两个数字相加//我有返回值int,谁调用我,我吧计算结果返还给谁public static int getSum(int a,int b){int result = a + b;return result;}public static void printSum(int a, int b){int result = a + b ;System.out.println("结果是" + result);}}

这里介绍几个重要概念和注意点:

形式参数表示方法被调用时用于接收外界数据的参数,如getSum(int a,int b)中a,b就是形参。实际参数表示调用方法时实际传给方法的数据,如main函数最后一行printSum(12,13)中的12和13。Java中进行方法调用中传递参数时,基本数据传递的是数据值本身,引用类型传递的是对对象的引用(在后面会做详细讲解)。实例中用到了static关键字,表示该方法为静态方法,与静态变量类似,表示该方法可以由类直接调用,无序实例化(这点同样会在面向对象讲解中详细介绍)。注意方法本意是功能块,是实现某个功能的集合,我们在设计过程中尽量让其只完成一个功能,这利于后期维护。

Main方法

最后简单介绍一下main方法(这里借鉴了大神的文章,原文点这里.):

main()方法就是是Java应用程序的入口方法,JVM在运行这个Java应用程序的时候,首先会调用main方法,从这里开始执行。Java的规范中规定必须这样定义,对这个定义有一定说法:

在调用main方法时不实例化这个类的对象,而是通过类名直接调用,所以必须加上修饰符public static。jvm有限制,main方法不能有返回值,因此返回值类型为void。Java规定main函数中必须有一个入参且必须为String[],名称可自定义,不过这个字符串数组的名字一般和sun java规范范例中mian参数名保持一致,取名为args。

最终得到的main方法的定义规则为:

public static void main(String args[]){......}

扩展一点,main()方法中字符串参数数组作用是接收命令行输入参数的,命令行的参数之间用空格隔开。

/*** 打印main方法中的输入参数*/public class TestMain {public static void main(String args[]){System.out.println("打印main方法中的输入参数!");for(int i=0;i<args.length;i++){System.out.println(args[i]);}}}

执行方法和运行结果

D:\Study\basetest\src>javac TestMain.javaD:\Study\basetest\src>java TestMain 1 2 3打印main方法中的输入参数!123

要深入了解main()方法需要我们研究JVM相关知识,针对开发而言理解到这个程度就够了,由于本人主要是做前端工作对JVM的研究不是太深入(菜鸡的自卑。。。),但根据身边Java程序员的反馈现今的面试中JVM相关问题越来越多,而且了解其底层机理对编程会有很大的帮助,所以在保证Java基础过关(这里是重点)的前提下对JVM深入学习还是有必要的。

好累啊,这次的讲解就先到这里把,之后的文章我会努力把我认为重要的点都讲到,并用尽量通俗易懂的方式说明,对我看过比较好的博客我也会放上链接,最后希望这篇文章可以帮到大家,码字不易,大家不喜勿喷哦。

上一篇:菜鸟学习笔记:Java基础篇1(走进Java、数据类型与转换)

下一篇:菜鸟学习笔记:Java基础篇3(面向对象思想、程序执行过程内存分析、面向对象重要概念)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。