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

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

变量

基本概念

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

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

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

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

变量作用域

对于在作用域里定义的变量,作用域同时决定了它的“可见性”以及“存在时间”。在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;

运算符

算术运算符

操作符 名称 描述
+ 加法 相加运算符两侧的值
减法 左操作数减去右操作数
* 乘法 相乘操作符两侧的值
/ 除法 左操作数除以右操作数
% 取余 左操作数除以右操作数的余数
++ 自增 操作数的值增加1
自减 操作数的值减少1

加减乘除取余操作很好理解,自增自减操作分为前缀自增自减法(++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
}

比较运算符

操作符 名称 描述
> 大于 相加运算符两侧的值
< 小于 左操作数减去右操作数
== 等于 相乘操作符两侧的值
>= 大于等于 左操作数除以右操作数
<= 小于等于 左操作数除以右操作数的余数
!= 不等于 操作数的值增加1

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

逻辑运算符

操作符 名称 描述
&& 逻辑与 当且仅当两个操作数都为真,条件才为真。
|| 逻辑或 如果任何两个操作数任何一个为真,条件为真。
! 逻辑非 用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false

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

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

位运算符

操作符 名称 描述
& 按位& 如果相对应位都是1,则结果为1,否则为0
| 按位或 如果相对应位都是0,则结果为0,否则为1。
^ 异或 如果相对应位值相同,则结果为0,否则为1
~ 按位取反 翻转操作数的每一位,即0变成1,1变成0。结果为: -(X+1)
<< 按位左移 通常格式为:value << num,value按位左移num位
>> 有符号按位右移 通常格式为:value >> num,value按位右移num位。
>>> 无符号按位右移 通常格式为:value >>> num,value按右移num位,移动得到的空位以零填充。

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

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}

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

赋值运算符

操作符 名称 描述
= 赋值 右操作数的值赋给左侧操作数
+= 加和赋值 左操作数和右操作数相加赋值给左操作数 (a+=b 等同于 a = a+b)
-= 减和赋值 左操作数和右操作数相减赋值给左操作数 (a-=b 等同于 a = a-b)
*= 乘和赋值 左操作数和右操作数相乘赋值给左操作数 (a*=b 等同于 a = a*b)
/= 除和赋值 左操作数和右操作数相除赋值给左操作数 (a/=b 等同于 a = a/b)
(%)= 取模和赋值 左操作数和右操作数取模后赋值给左操作数 (a%=b 等同于 a = a%b)
<< = 左移位赋值 左移位赋值运算符 (a<<=b 等同于 a = a<<b)
>> = 右移和赋值 右移位赋值运算符 (a>>=b 等同于 a = a>>b)
&= 按位与和赋值 按位与赋值运算符 (a&=b 等同于 a = a&b)
|= 按位或和赋值 按位或赋值操作符 (a|=b 等同于a = a|b)
^ = 按位异或和赋值 按位异或赋值操作符 (a^=b 等同于 a = a^b)

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

//两变量值互换
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方法中的输入参数!
1
2
3

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

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

上一篇:菜鸟学习笔记:Java基础篇1(走进Java、数据类型与转换)
下一篇:菜鸟学习笔记:Java基础篇3(面向对象思想、程序执行过程内存分析、面向对象重要概念)

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

  1. Java学习笔记之基础篇

    Java学习笔记之基础篇 目录 Java如何体现平台的无关性? 面向对象(OO)的理解 面向对象和面向过程编程的区别 面向对象三大特征 静态绑定和动态绑定(后期绑定) 延伸:类之间的关系 组合(聚合) ...

  2. Java基础篇1——变量与数据类型

    Java基础篇1--变量与数据类型 1.标识符命名规则 标识符以由大小写字母.数字.下划线(_)和美元符号($)组成,但是不能以数字开头. 大小写敏感 不能与Java语言的关键字重名 不能和Java类 ...

  3. jqGrid 学习笔记整理——基础篇

    jqGrid 学习笔记整理--基础篇 jqGrid 实例中文版网址:http://blog.mn886.net/jqGrid/ 国外官网:http://www.trirand.com/blog/ 本人 ...

  4. 学习笔记-java基础-网络编程

    刚在培训机构学习完JAVA基础和WEB,感觉边学边忘.就把这作为记忆的笔记,我也不知道要不要记笔记,写在本子上太耗费时间了. 一.要想实现网络通信,首先要解决两个问题: ①:如何从网络中定位到一台或多 ...

  5. Java菜鸟教程系列 学习笔记总结 基础篇(1)

    基础语法 本博客通过学习菜鸟教程Java专栏,并整理得出的Java基础知识. 命名规范 1.项目名全部小写 2.包名全部小写 3.类名首字母大写,如果类名由多个单词组成,每个单词的首字母都要大写.如: ...

  6. Java快速教程--vamei 学习笔记(基础篇)

    链接:http://www.cnblogs.com/vamei/archive/2013/03/31/2991531.html java快速教程第1课 从HelloWorld到面向对象 学习网址:ht ...

  7. 【狂神说】Docker 学习笔记【基础篇】

    学习思想而非学技术,技术日新月异,唯有思想长盛不衰,润泽后生 学习资料: [狂神说Java]Docker最新超详细版教程通俗易懂_哔哩哔哩_bilibili Docker快速入门总结笔记_huangj ...

  8. golang学习笔记(基础篇)

    LCY~~Golang学习笔记 一.Go语言开发环境 ##安装Go开发包以及VsCode Go开发包与vscode配置安装教程网址:https://www.liwenzhou.com/posts/Go ...

  9. 狂神说Java学习笔记 Java基础

    目录 机器语言 第二代语言(汇编语言) 第三代语言 高级语言 Java特性和优势 JDK(Java Development Kit) JRE(Java Runtime Enviroment) JVM( ...

  10. Excel学习笔记之基础篇

    记录一下跟着网易云课堂大饼老师Excel课程学习的笔记,只能起一个大纲的作用吧,用来练习的数据表不方便上传,也懒得截图录屏做成GIF操作啥的.课程共分为基础篇,进阶篇之函数,进阶篇之数据透视,进阶篇之 ...

最新文章

  1. SQLServer2005数据库自动备份
  2. Dataset之MapillaryVistas:MapillaryVistas数据集的简介、下载、使用方法之详细攻略
  3. [蓝桥杯2017决赛]图书排列-next_permutation枚举
  4. HDU 1207 汉诺塔II (递推)
  5. python参考手册下载_Python中文手册【Word版 】
  6. 镁光硬盘测试软件,镁光固态硬盘评测
  7. 安卓APP逆向入门破解
  8. UitableView 动态高度的优化 提高寻星效率
  9. 链接Maya和UE4实现real-time预览——Connecting Maya to Unreal with Live Link
  10. 免费pdf转word网页版
  11. AT指令对wavecom串口GSM工业手机发送短信(英文和PDU短信)
  12. STM32 Combined PWM的用法
  13. 编程规范 --- 可读性
  14. 在Ubuntu中用Qt基于OpenCV调用大恒相机
  15. html文档是哪个版本,HTML 简介, 版本和文档类型声明
  16. c语言开头的作用是什么,C语言为什么开头都加;#includestdio.h有什么作用?
  17. Android 数据越权备份风险
  18. Android Studio教程从入门到精通
  19. 近红外光谱预处理方法
  20. c语言程序设计 医院,C语言程序设计(医院信息管理系统)附源代码(17页)-原创力文档...

热门文章

  1. php checkbox后台判断是否选中,jquery如何判断是否选中checkbox
  2. idea主题颜色Linux,IntelliJ IDEA更换主题样式分享
  3. python列表嵌套 分配学生_学生信息中列表嵌套使用的问题--python代码工作笔记(1)...
  4. websocket.js
  5. OAuth 授权timestamp refused问题
  6. 四种转换方式:自动,强制,Parse,Convert
  7. mysql隐藏information_如何让普通用户登录phpmyadmin不显示information_schema
  8. 金税盘怎么安装在电脑上_金税盘怎么安装,电脑重装后怎样安装金税盘税控开票软件?...
  9. 怎么安装aptdaemon模块_模块化扩容,米特拉轻商用空气能热水震撼亮相
  10. NameNode之文件系统目录树