JAVA 基础

一、       Java编程风格与命名规范

1.     格式规范

a)      缩进嵌套的代码

b)      断开很长的句子

c)      使用空白

d)      不要直接使用Tab控制符

2.     命名规范

a)      JAVA源文件的命名  

JAVA源文件名必须和源文件中所定义的类的类名相同。且不能为关键字

b)     Package的命名  

Package名的第一部分应是小写ASCII字符,并且是顶级域名之一,通常是com、edu、gov、mil、net、org或由ISO标准3166、1981定义的国家唯一标志码。Package名的后续部分由各组织内部命名规则决定,内部命名规则指定了各组件的目录名,所属部门名、项目名等。   

c)      Class/Interface的命名  

Class名应是首字母大写的名词,    而且大写中间单词的首字母。命名时应该使其简洁而又具有描述性。异常类的命名,应以Exception结尾。Interface的命名规则与Class相同。

d)     常量的命名  

常量名的字母应全部大写,不同单词之间通过下划线连接,并且名字组合应该赋予含义。

e)      变量的命名

  • 普通变量 

普通变量名的首字母小写,其它每个单词的首字母大写。命名时应该使其简短而又有特定含义,简洁明了的向使用者展示其使用意图。    

  • 约定变量  

所谓约定变量,是指那些使用后即可抛弃(throwaway)的临时变量。通常i、j、k、m和n代表整型变量;c、d和e代表字符型变量。

f)       方法的命名  

方法名的第一个单词应是动词,并且首字母小写,其它每个单词首字母大写。  

g)     方法参数的命名 

选择有意义的名称作为方法的参数名。可能的话,选择和需要赋值的字段一样的名字。 

详见Java编程风格与命名规范-ZZ

二、       语法基本元素

1.     关键字

a)      定义:被JAVA语言赋予了特殊含义的单词。

b)      特点:关键字中所有字母都为小写。

c)      注意:goto和const作为保留字存在,目前并不使用。

2.    

 
   


标识符

a)      含义:标识符就是给类,接口,方法,变量等起名字时使用的连续字符序列。

b)      组成规则:① 英文大小写字母A~Z和a~z ② 数字字符0~9$ 和 _

c)      注意事项:不能以数字开头不能是Java中的关键字区分大小写

不能有空格

3.     数据类型、常量和变量

a)      基本数据类型

byte、short、int、long、float、double、char、boolean

b)      引用数据类型

数组、类、接口。

分类

不同类型

关键字

字节数

取值范围

默认值

整数型

字节型

byte

1个字节

-27~27-1(-128~127)

0

短整型

short

2个字节

-215~215-1(-32768~32767)

0

整型

Int (默认)

4个字节

-231~231-1

0

长整型

long

8个字节

-263~263-1

0

文本型

字符型

char

2个字节

0~216-1(从0~65536)

‘\u0000’

浮点型

单精度浮点型

float

4个字节

大约±3.40282347E+38F

(有效位数为6~7位)

0.0f

双精度浮点型

Double

(默认)

8个字节

大约±1.79769313486231570E+308

(有效位数为15位)

0.0d

逻辑型

布尔型

boolean

1个字节

True/false

false

级别从低到高为:(byte-->short),char (这两个平级)--> int--> float--> long--> double

补充: 不同的字符所占的字节是不同的。详见输入输出章节之字符编码。

0x  0

c)      数据类型转换

不同的基本数据类型之间进行运算时需要进行类型转换,除boolean类型外所有的基本数据类型都需要考虑类型转换,其主要应用在算术运算和赋值运算时。

  • 自动类型转换:除boolean型外,其他数据类型系统自动从低级别到高级别转换;
  • 强制类型转换:把一个高级别的数赋给一个低级别的的变量。
  • Ø  溢出处理:待补充
  • 补充:同种类型之间才可以进行强制装换。错误举例:String a = (String)2;

正确举例:String a = integer.toString(2)或int i = integer.parseInt(s);

d)      变量

所有局部变量在使用前都得初始化。详见类与对象部分。

e)      常量

在程序执行的过程中其值不可以发生改变的量,Java中常量可分为字面值常量和自定义常量。 eg. final double PI = 3.14;

  • 字符串常量     用双引号括起来的内容
  • 整数常量       所有整数   12,23,默认为int长整型加字母‘L ’
  • 小数常量       所有小数   12.34,56.7,默认为都doublefloat加字母‘F’
  • Ø  字符常量       用单引号括起来的内容‘a’,‘A’,‘0’和转义字符常量”\n”
  • 布尔常量       较为特殊,只有true和false
  • 空常量         null (数组部分讲解)
  • 符号常量       用一个标识符来表示的常量,修饰符final,eg.#definePI3.14

f)      

引用方法

含义

\b

退格

\t

水平制表符Tab

\n

换行

\f

表格符

\r

回车

\'

单引号

\"

双引号

\\

反斜线

表:常用转义字符

 

整型常量的三种进制表示形式

  • 十进制整数,如12, -314, 0。
  • 八进制整数,要求以0开头,如012
  • 十六进制数,要求0x或0X开头,如0x12
  • 十进制数形式,必须含有小数点,例如:

f)       浮点类型常量两种表示形式

3.14       314.0 时     .314

  • 科学记数法形式,如

3.14e2      3.14E2      314E2

g)      转义字符的用法

  • System.out.println(“Hello\nWorld”);
  • System.out.println(“Hello”+”\n”+”World”);

4.     运算符和表达式

表达式是由运算符与操作数组合而成的,运算符指明对操作数的运算方式。组成表达式的Java操作符有很多种。运算符按照其要求的操作数数目来分,可以有单目运算符、双目运算符和三目运算符,它们分别对应于1个、2个、3个操作数。运算符按其功能来分,有算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符和其他运算符。

优先级

   

含义描述

1

() ,.,[]

强制运算、方法调用

2

++ ,--, + ,~(位取反), !(逻辑取反)

一元运算、字符串相加

4

* , / , %

算术运算 乘除、取余

5

+ , -

算术运算 加减(正负)

7

<,>,<= ,>= ,

比较运算、类运算

8

= = , ! = ,.equals()

比较运算

9

&

逻辑(位)运算 与

10

^

位运算 异或

11

|

逻辑(位)运算 或

12

&&

逻辑 与(短路)

13

||

逻辑 或(短路)

14

?:   eg. (关系表达式)?表达式1:表达式2

三元 条件运算

a)      算术运算符

* , / , % , + , -

  • %:任何整数模2不是0就是1,所以只要改变被模数就可以实现开关运算。
  • +:加法运算符,连接符。举例:123+321+hello=444hello;hello+123+321=hello123321;hello+(123+321)=hello444;
  • ++,--:自增自减运算。举例:int a=5;print(4++);//5 print(++4);//7
  • * , /:注意小数类型计算问题。1/2*2=0,1/2*2.0=0,1/2.0*2=1.0。整型与整型运算得整型,整形与浮点型运算得浮点型,结果取取决于第一次遇到浮点型的位置。

b)      赋值运算符

= , *= , /= , %= , += , -=

c)      比较运算符

<,>,<= ,>= ,= = , ! = boolean bo=(i==j);

       特点:该运算符的特点是:运算完的结果,要么是true,要么是false。

待补充:==与.equals()区别:

d)      逻辑运算符

&, | , ^ , ! ,&&, ||

       逻辑运算符除了 !  外都是用于连接两个boolean类型表达式。

  • &:只有两边都为true结果是true。否则就是false。
  • |:只要两边都为false结果是false,否则就是true。
  • ^:异或:和或有点不一样。

u  两边结果一样,就为false;

u  两边结果不一样,就为true。

  • & 和 &&区别:

u  &:无论左边结果是什么,右边都参与运算(建议短路与);

u  &&: 短路与,如果左边为false,那么右边不参数与运算。

  • | 和|| 区别:

u  |:两边都运算(建议短路或);

u  ||:短路或,如果左边为true,那么右边不参与运算。

 

 

三、       流程控制

在Java中,流程控制分为三种基本结构:顺序结构、分支结构和循环结构。

If 判断:

else If 判断:

If 判断(嵌套)

switch 判断:

if (表达式) {

       //语句1;

}else{

       //语句2;

}

类比:

(关系表达式)?

表达式1:表达式2;

注:else语句可用

Continue代替;

if (表达式1) {

       //语句1;

}

else if (表达式2) {

           //语句2;

}

else {

//语句3;

}

If (表达式1) {

       if(表达式2) {

              //语句1;

       } else {

              //语句2;

       }

} else {

       //语句3;

}

switch (表达式) {

case 常量1:

语句1;

break;

case 常量2:

语句2;

break;

default:

语句3;

}

while循环:

do-while循环

for循环:

while(表达式) {

            //循环体;

}

do{

   //循环体;

} while(表达式);

for(初始化;条件;迭代) {

   //循环体;

}

           

1.     循环语句

a)      循环是相同动作的集合.

b)      循环次数确定的情况,通常选用for循环;

循环次数不确定的情况,通常选用while或do-while循环。

c)      初始情况不满足循环条件时,while循环一次都不会执行;

do-while循环不管任何情况都至少执行一次。

d)      for 循环,若变量在判断条件内初始化,则作用域为循环体(大括号)内。

e)      嵌套循环判断条件:内层循环一圈,外层循环一次。

2.     判断语句

a)      多重if与switch选择结构比较

  • 相同点:都是用来处理多分支条件的结构
  • 不同点:switch选择结构只能处理等值条件判断的情况;多重if选择结构没有switch选择结构的限制,特别适合某个变量处于某个连续区间时的情况。

b)      else If 顺序进行判断,当前面条件不满足时才进行下一步,条件满足,跳过剩余结构,结束判断语句。

c)      switch 后面的小括号中的变量应该是int、short、byte、char、枚举类型、String

d)      switch 可进行语句合并,以进行连续区间判断。(省去语句和break)

3.     跳转语句

a)      break:结束判断语句,执行完判断体后的语句后,终止离自己最近的外层循环。

 

do {

       Stringtitle = input.next();

    if (title.equals("exit")) {

       break;

        }

    } while (true);// 跳出死循环

b)      continue结束判断语句,终止本次循环,不执行判断体后面语句,进入下一次循环。

    publicstaticvoidmain(String[] args) {

    inti = 0;

    do {

    i++;

    if (i == 3) {

       // break; // 输出12

       continue; // 输出1245

        }

    System.out.println(i);

    } while (i<5);

}

c)      return结束当前方法的执行并退出,并返回值到调用该方法的语句处

    for (inti = 0; i<10; i++) {

    if (i % 2 != 0)

       return;

    System.out.print(i);

    } // 运行结果:0

4.     flag 或index标记的用法

  • 循环内判断用flag标记返回判断结果。
  • 返回函数返回值时,用flag传递返回值。
  • 需要交互输入的函数最好放在测试类的main中,否者传递返回值会很麻烦。

 

 

四、       数组

数组是一个变量,存储相同数据类型的一组数据

步骤

举例

解释

声明

int[ ] a;

告诉计算机数据类型是什么

分配空间

a = new int[5];

告诉计算机分配几个连续的空间

赋值

a[0] = 8;

向分配的格子里放数据

引用

a[0] = a[0] * 10;

引用数据进行计算

 

 

 

 

 

 

1.     数组的常用操作

a)      声明数组并分配空间

数据类型[ ] 数组名 =  new 数据类型[大小];   

b)     数组的初始化(声明的同时赋值)

  • 方法1: 边声明边赋值。

int[ ] scores = {89, 79, 76};

int[ ] scores = new int[ ]{89, 79, 76};

  • 方法2:动态地从键盘录入信息并赋值。

Scanner input = new Scanner(System.in);

for(int i = 0; i < 30; i ++){

scores[i] = input.nextInt();}

  • 创建数组并赋值的方式在一条语句中完成。
  • 所有的数组下标默认从0开始,而且访问时不可超出定义的上限,否则会产生越界错误。
  • for 遍历 (逆序输出)

c)      数组的遍历

for (intk = array.length - 1; k>= 0; k--) {// 逆序输出

    System.out.print(array[k]+"\t");

}

  • for增强型函数

for (inttemp : array) {// 用for增强型函数对数组进行顺序输出

    System.out.println(temp);

}

  • 对数组进行增添,修改,删除

数组的增添举例

String[] phones = new String[] {"iPones4S", "iPones5", null};

// null 不用加双引号

intindex = -1;// 增加监视器

for (inti = 0; i<phones.length; i++) {// 1.增加iPones6

    if (phones[i] == null) {

        index = i;

        break;

    }

}

    if (index != -1) {

        phones[index] = "iPones6";

    } else {

        System.out.println("数组已满");

        }

System.out.println(Arrays.toString(phones));

注释:数组的修改与删除类似

d)     数组的排序

  • 冒泡排序

for (intm = 0; m<array.length - 1; m++) { // 冒泡排序

for (intn = 0; n<array.length - 1 - m; n++) {

if (array[n] >array[n + 1]) {

inttemp = array[n];

array[n] = array[n + 1];

array[n + 1] = temp;

                }

            }

        }

e)      使用Arrays 类操作数组

方法名称

说明

Arrays.

boolean equals(array1,array2)

比较array1和array2两个数组是否相等

sort(array)

对数组array的元素进行升序排列

String toString(array)

将一个数组array转换成一个字符串

void fill(array,val)

把数组array所有元素都赋值为val

copyOf(array,length)

把数组array复制成一个长度为length

的新数组,返回类型与复制的数组一致

int binarySearch(array, val)

查询元素值val在数组array中的下标

(要求数组中元素已经按升序排列

注释:import java.util.*;

2.     二维数组

一、          数组的初始化

    String[][] str = newString[5][];

    int[][] scores = newint[][] { { 90, 85, 54 }, { 76, 80 },{ 87 } };

    int[][] scores = { { 90, 85, 54 }, { 76, 80 }, { 87 } };

二、          数组的遍历

publicclassCase5 { // 二维数组的遍历

    publicstaticvoidmain(String[] args) {

    int[][] scores = newint[][] { { 90, 78, 54 }, { 76 , 80 }, { 87 } };

    for (inti = 0; i<scores.length; i++) { //外层数组长度

    for (intj = 0; j<scores[i].length; j++) {//内层数组长度

    System.out.println(scores[i][j]);

                }

            }

        }

    }

posted @ 2019-01-08 15:27  叫声大哥教你梳中分  阅读(239)  评论(0编辑  收藏  举报