黑马程序员-Java基础总结02——Java基本语法(一)

时间:2022-08-27 10:11:18

黑马程序员-Java基础总结02——Java基本语法(一)

-------android培训java培训、期待与您交流! ----------

1关键字:Java语言赋予了特殊含义的单词(该单词所以字母均小写)

用于定义数据类型的关键字

class

interface

byte

short

int

long 

float

double

char

boolean

void

 

 

 

 

用于定义数据类型值的关键字

true

false

null

 

 

用于定义流程控制的关键字

if

else

switch

case

default

while

do

for

break

continue

return

 

 

 

 

用于定义访问权限修饰符的关键字

private

protected

public

 

 

用于定义类,函数,变量修饰符的关键字

abstract

final

static

synchronized

 

用于定义类与类之间关系的关键字

extends

implements

 

 

 

用于定义建立实例及引用实例,判断实例的关键字

new

this

super

instanceof

 

用于异常处理的关键字

try

catch

finally

throw

throws

用于包的关键字

package

import

 

 

 

其他修饰符关键字

native

strictfp

transient

volatile

assert


2标识符:程序中可自定义的一些名称(不可数字开头及使用关键字,Java区分大小写) 

*包名:多单词组成时所有字母都小写xxxyyyzzz ,例:packagestudent

*类名接口名:多单词组成时,所有单词首字母大写XxxYyyZzzclassHello);

*变量名和函数名:单个单词时均小写,而多单词组成时,除第一个单词首字母小写其他首字母均大写xxxYyyZzzintboy);

*常量名:所有字母都大写,多单词时用下划线连接:XXX_YYY_ZZZ (final int A = 5)

 

3、注释:用于注解说明解释程序的文字,提高了代码的阅读性。

Java中的注释格式:

单行注释: //注释文字

多行注释: /* 注释段落 */

文档注释: /** 注释文档内容 */

 

4、常量:表示不能改变的数值。

  代码格式示例: publicstatic final intMAX_VALUE =2311

Java中常量的分类:

1、整数常量:所有整数;

2、小数常量:所有小数;

3、布尔(boolean)型常量:特殊,仅truefalse两数值。

4、字符常量:将一个数字字母或者符号用单引号( ' ' )标识。

5、字符串常量: 将一个或者多个字符用双引号(“”)标识。

6null常量:只有一个数值就是: null.

对于整数:有四种表现形式:

二进制:01 ,满21.

八进制:07 ,满81.0开头表示。

十进制:09 ,满101.

十六进制:09AF,满161.0x开头表示。


负数的二进制表现形式:

对应的正数的二进制取反加1

详解: 正数用原码来表示,而负数用补码来表示。

(其中二进制的最高位为符号位:正 为0 ,负则为1)。

  原码:是正数由十进制直接转换为二进制所得的数;如:7:0000 0000 0000 0111

  反码:将原码中的01置换,即7的反码为:1111 1111 1111 1000

  补码:表示负数,例如—7则是7的反码加“字节1”,即:1111 1111 11111001

(或 —7可由6的反码的得到: 1111 11111111 1001

   整型(例short2字节)的范围为:-2^152^15–1;

原因:因为2进制最高位为符号位,所以最高只有14次幂(和则为15次幂减1)

2字节能容纳最大正数为   2^15 -1 : 0111 1111 1111 1111

          而最小负数为–2^15     : 1000 0000 0000 0000

 

5、变量:

  代码格式示例: public static Stringname=小明

*内存中的一个存储区域;

*该区域有自己的名称(变量名)和类型(数据类型);

*该区域的数据可以在同一类型范围内不断变化;

目的:用来不断的存放同一类型的常量,并可以重复使用。

注意事项:

A变量的作用范围(一对{}之间有效,) 

变量根据使用可分为成员变量(定义于类,有效于该类范围)、

局部变量(定义于方法/函数,有效于该方法,外部程序无法访问)。

B、初始化值;

定义变量的格式:数据类型  变量名 = 初始化值;

声明:int i;   初始化i= 20

声明并初始化赋值:int i = 20

理解:变量就如同数学中的未知数。

 

6、数据类型:

   Java语言是强类型语言(严格区分变量的类型,不允许不同类型随意赋值)

  【弱类型则是定义的变量没有具体类型,可进行任意类型的赋值,即一个变量容器可装任何类型数据,弱类型语言: JavaScript等】

  Java对于每种数据都定义了明确的具体数据类型,在内存中也分配了不同大小内存空间;

  因此:根据需要合理选择数据类型,可减少程序对内存空间的使用/占用。

 

 

数据类型:     八种基本、三种引用

|——基本数据类型

   |——数值型

      |——整数类型(byteshortintlong  整数默认是int

      |——浮点类型(floatdouble           小数默认是double

|——字符型(char

|——布尔型(boolean

|——引用数据类型

   |——类(class

|——接口(interface

|——数组(Array/[]

PS:  字符串String不属于数据类型,是一个特殊对象,字符串都是常量(例"abc"),因而它们存放在内存中的常量池(中的字符串池)。


1、字符(char): 用单引号‘’来表示,例:‘A’‘2’

: char x =‘5’不同于int y = 5

字符串String:用双引号“”来表示例如:“abc”234”


2byte : 字节,(1字节= 8/bit),范围:-128127

(:127 : 0111 1111,首位为符号位,正数为0,负数为1

short:2字节,16位,范围:-2^152^15-1

int:4字节,32位,范围:-2^312^31-1

long:8字节,64位,范围:-2^632^63-1

char:2字节,16位,最高位不是符号位,unicode字符集有65535个,要观察某个字符在unicode表中的顺序位置,必须用int类型显示转换,如(int)a’。

(不能使用short类型,因为char的最高位不是符号位,所以short无法满足存储)

float:4字节,32位,用f来修饰:34.5f

double:8字节,64位,用d来修饰(因为小数默认是double,所以可省略)

【注意:英语字符a占一个字节,而汉字字符则占两个字节,单个字符均能用char来装,

ab虽然是两个字节但算是两个字符,不能用char。】

 

3、类型转换:

*自动类型转换(也叫隐式类型转换

      低精度向高精度自动转换:byte < short(char) < int < long < float < double

*强制类型转换(也叫显式类型转换

      高精度向低精度强制转换(需要定义转换类型以及可能会损失精度);

      例如:int a = (int)34.5f ;a = 34;(损失了小数值精度)

注意:使用float类型时该数值必须要加f说明,因为整数默认是int;小数默认是double

示例(提醒):

*自动类型提升

byte b = 3;      int x = 4;

x = x + b;   //b会自动提升为int类型进行运算。

强制类型转换

byte b = 3;      b = b + 4;//报错

b = (byte)b+4;//强制类型转换,强制将b+4的结果转换为byte类型,再赋值给b

*思考:

byte b1=3,b2=4,b;

b=b1+b2;(失败) b=3+4;

哪句是编译失败的呢?为什么呢?

因为b1b2是变量不是具体数值,34是具体数值

 

7、运算符:

算术运算符:

    正号(+)、负号(-)、加减乘除(+-*/)、

    取模(%,即除法求商舍去余数)、

自增(++)前后[++xx++]、自减(--)前后[--yy--]

字符串相加(+,即"He"+"llo"——"Hello");

字符串与任何数据使用“+”连接,最终都会变成字符串

【如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。但被模数是负数就另当别论】

 

赋值运算符

符号:= , +=,-=, *=, /=, %= ;(均为单个运算符)

 

比较运算符(结果都是boolean型,truefalse):

  相等于(==)、不等于(!=)、小于(<</SPAN>)、大于(>)、

小于等于(<=)、大于等于(>=)、

instanceof检查是否是类的对象,例如:"Hello" instanceof String ; (true)

 

逻辑运算符(用于连接boolean类型的表达式):

AND()false & true  =false (两边都为true时结果为true

OR(或):false | true  =true         (存在一边为true时结果为true

XOR(异或) true^ false  = true;       (当两边不同时为true,相同时为false

Not()  !true  =false;                (非,即与原结果相反)

&&  AND(短路类似,但当左边能决定结果是不执行右边;

|| OR(短路)类似,但当左边能决定结果是不执行右边;

 

位运算符(用于二进制):

   <<   左移     3 << 2 = 12 -->3*2*2=12

  >>   右移     3 >> 1 = 1  -->3/2=1

   >>>     无符号右移     3>>> 1 = 1--> 3/2=1

(>>>主要用于负数,右移时最高位均用0来填充,则无论正负数均会减小)

   &    与运算   6 & 3 =2

      或运算   6 | 3 = 7

   ^    异或运算  6^ 3 = 5

   ~    反码     ~6 = - 7

小知识点:  一个数异或^ 同一个数两次,结果得到原数【(N^M^ M = N】。

 

三元运算符

格式

(条件表达式)?表达式1:表达式2

如果条件为true,运算后的结果是表达式1

如果条件为false,运算后的结果是表达式2

示例:

获取两个数中大数。

intx=3y=4z;

z =(x>y)?x:y;  //z变量存储的就是两个数的大数。

 

8、程序流程判断

*判断结构: if语句

三种格式:

  1. if(true)

   {     执行语句;  }

 

  1. if(条件表达式)

   {     执行语句;  }

   else

   {     执行语句;  }

if(条件表达式)

   {     执行语句;   }

   else if (条件表达式)

   {     执行语句;   }

   ……

   else

   {     执行语句;   }

 

if语句特点:

   a,每一种格式都是单条语句。

   b,第二种格式与三元运算符的区别:三元运算符运算完要有值出现。好处是:可以写在其他表达式中。

   c,条件表达式无论写成什么样子,只看最终的结构是否是true或者false;

 

*选择结构  switch语句

switch(表达式)              

{  case取值1:  

执行语句;

      break

   case取值2:  执行语句;

      break

   ……         

   default:   执行语句;

      break   

}  

//(实质:由表达式得出一数值,在case中选择对应的数,执行该语句,如果无对应值则执行default语句。)

switch语句特点:

Aswitch语句选择类型只有四种:byteshortintchar

Bcase之间与default没有顺序。先执行第一个case,没有匹配的case执行default

C、结束switch语句的两种情况:遇到break,或直到执行至switch语句结束

D、如果匹配的case或者default没有对应的break,那么程序会继续向下执行,运行可以执行的语句,直到遇到break或者switch结尾结束。


PS: JDK1.5起switch语句支持Enum枚举值,JDK1.7起支持String类型(但不能比较null值/传入或case语句都不行,因为底层是通过javac编译调用str.equals(String)方法)。


*循环结构:whiledo whilefor 三种语句

 

while(条件表达式)

{

  执行语句;

}

do while语句格式:

do

{  执行语句;

}while(条件表达式);

 

do while特点:

是条件无论是否满足,循环体至少执行一次。

for(初始化表达式;循环条件表达式;循环后的操作表达式)

{

     执行语句;(循环体)     }

注:

a,for里面的两个表达式运行的顺序,初始化表达式只读一次,判断循环条件,为真就执行循环体,然后再执行循环后的操作表达式,接着继续判断循环条件,重复找个过程,直到条件不满足为止。

b,whilefor可以互换,区别在于for为了循环而定义的变量在for循环结束时就在内存中释放。而while循环使用的变量在循环结束后还可以继续使用。

c,最简单无限循环格式:while(true) , for( ; ; ),无限循环存在的原因是并不知道循环多少次,而是根据某些条件,来控制循环。

 

其他流程控制语句:

break(跳出):应用于 选择结构switch和 循环结构,跳出单重循环;

continue(继续)应用于循环结构,跳过此次循环(单重循环的单次循环)。

注:

A、这两个语句离开应用范围,存在是没有意义的。

Bcontinue语句是结束本次循环继续下次循环,而break是不再执行该语句,直接跳出;

C、标号的出现,可以让这两个语句作用于指定的范围。


特殊:  

跳出多重循环的方法:   

A、return的特殊应用:   在方法语句中,即使是多重循环,当执行到return语句时除了方法中还有的finally语句会执行,其他都终止。

public class ReturnDemo {  
public static void main(String args[]){
int[] arr = new ReturnDemo().getNumber();
for()
}
public int[] getNumber(){
int[] arr = new int[2];
for(int i=1;i<100;i++){ //让i循环99次
for(int j=1;j<=i;j++){
if(i*j==81){
int[0] = i; int[1] = j;
return arr; //返回指定数据,结束方法执行;
} } }
return arr; //由于方法必须返回数据,如果上述判断代码中发生异常,那么就会返回默认的数据;
}
}


B、带标记的break 跳出多重循环(类似C语言的goto语句应用)

public class BreakDemo {  
public static void main(String args[]){
OK: //设置一个标记 使用带此标记的break语句跳出多重循环体
for(int i=1;i<100;i++){ //让i循环99次
for(int j=1;j<=i;j++){
if(i==10){
break OK; //跳出标记为OK的多重循环;
}
System.out.print(i + "*" + j + "=" + i*j) ;
System.out.print(" ") ;
}
System.out.println() ;
}
}
}


其他:  * 循环嵌套(多重循环0

语句的嵌套应用    

累加求和,计数器

提醒:

1、多行注释中运行单行注释,但不允许多行注释;

2、在各种表达式中:当出现多个表达式时只需用“,”来隔开[例:while(x<1,y>2)]

3、变量有自己的作用域,例for的初始化表达式中的变量仅在for语句中有效,完毕则在内存中释放;