Java EE 第一篇 基础语法


语法规则

一、变量与数据类型

变量就是系统为程序分配的一块内存单元,用来存储各种类型的数据。由于该存储单元中的数据可以发生改变,因此得名为"变量"。

1、变量分类:

基本数据类型变量

引用数据类型变量。

按照位置分类:

局部变量:方法或语句块内部定义的变量

成员变量:方法外部、类的内部定义的变量

注意:类的外面不能有变量的声明

2、数据类型:

Java中的数据类型有四类八种。

3、标识符

Java 对包、类、方法、参数和变量等要素命名时使用的字符序列称为标识符。

规则:

  1. 由字母、数字、下划线(_)和美元符号($)组成。
  2. 不能以数字开头
  3. 区分大小
  4. 长度无限制
  5. 不能是 Java 中的保留关键字

需要见名知意,包名小驼峰,类名大驼峰,方法小驼峰,变量名全部小写,遵循《阿里巴巴Java手册规范》。

4、类型转换

自动类型转换:容量小的类型自动转换成容量大的数据类型

byte,short,int -> float ->long ->double
byte,short,int 不会互相转换,它们三者在计算时会转换成 int 类型

强制类型转换:容量大的类型转换成容量小的数据类型时,要加上强制转换符

long l = 100L;
int i = (int)l;

有可能造成精度降低或数据溢出,使用时要小心。

二、方法

方法用于封装一段特定的逻辑功能。方法的主要要素有:权限修饰符 方法名、参数列表和返回值。

1、格式:

权限修饰符 返回值类型声明 方法名称(参数列表){
    方法中封装的逻辑功能;
    return 返回值;
}

2、权限修饰符

3、返回值

方法调用结束后可以返回一个数据,称之为返回值。 方法在声明时必须指定返回值的类型。 通过 return 语句返回,return 语句的作用在于结束方法且将数据返回。 如果方法没有返回值(即方法不需要返回数据),需将返回值类型声明为 void,此时直接return会结束此方法。

4、参数列表

方法的参数列表:在调用时传递给方法,需要被方法处理的数据。 在方法定义时,需要声明该方法所需要的参数变量。 在方法调用时,会将实际参数值传递给方法的参数变量。必须保证传递参数的类型和个数符合方法的声明。

public void say(int a,int b){
    System.out.println(“方法 say 正在执行”);
}

三、运算符

算术运算符 赋值运算符 关系运算符 逻辑运算符 按位运算符 移位运算符 其他
+ = == & AND >> 右移运算符 字符串连接重载+
- += != | OR << 左移运算符 三目运算符(分支语句简写)
* -= < ^亦或 XOR
/ *= > ! NOT
% /= <= &&短路与
++ %= >= ||短路或
--

四、转义字符

所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示。
而C中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了
转义字符 意义 ASCII码值(十进制)
\n 换行,将当前位置移到下一行开头 010
\r 回车 ,将当前位置移到本行开头 013
\t 水平制表(HT) (跳到下一个TAB位置) 009
\ 代表一个反斜线字符''' 092
\' 代表一个单引号(撇号)字符 039
\" 代表一个双引号字符 034



程序执行结构

任何简单或复杂的算法都可以由顺序结构、分支结构和循环结构这三种基本 结构组合而成。

顺序结构是一种基本的控制结构,它按照语句出现的顺序执行操作。

分支结构又被称为选择结构,根据条件成立与否来执行操作。

循环结构是一种重复结构,如果条件成立,它会重复执行某一循环体,直到出现不满足的条件为止。

一、分支结构:

1、if-else、if-else if-else格式:

if(条件语句){…}
if (条件语句){…}else{…}
if (条件语句){…}else if(条件语句){…}
if (条件语句){…}else if(条件语句){…}else{…}

2、switch

switch(表达式){
case 取值1: 语句块 1;break;
case 取值n: 语句块 n;break;
default: 语句块 n+1;break;
}
注意:
  1. 表达式的返回值必须是下述几种类型之一:int, byte, char, short,String;
  2. case 子句中的取值必须是常量,且所有 case 子句中的取值应是不同的;
  3. default 子句是可选的;
  4. break 语句用来在执行完一个 case 分支后使程序跳出 switch 语句块;
  5. 如果 case 后面没有写 break 则直接往下面执行!
  6. Case 后面的执行体可写{ }也可以不写{ }

二、循环结构

1、while循环

符合条件,循环继续执行;否则,循环退出 特点:先判断,再执行

while(条件表达式){
    //语句块;
}

使用 while 循环的步骤

  1. 分析循环条件和循环操作
  2. 套用 while 语法写出代码
  3. 检查循环是否能够退出

2、do-while循环

先执行一遍循环操作,符合条件,循环继续执行;否则,循环退出

特点:先执行,再判断

do {
    循环操作
}while ( 条件表达式 );

while 循环和 do-while 循环的区别?

  • while:先判断条件,如果条件满足,再执行循环操作
  • do while:先执行一遍循环操作,然后再判读条件,如果条件满足,继续执行循环操作。

3、for循环

for(初始化参数;判断条件 ;更新循环变量){
    循环体;
}

逗号运算符:

这里不可忽略的一个就是逗号操作符,Java里唯一用到逗号操作符的就是for循环控制语句。在表达式的初始化部分,可以使用一系列的逗号分隔的语句;通过逗号操作符,可以在 for语句内定义多个变量,但它们必须具有相同的类型

for(int i = 1, j = i + 10;i < 5;i++, j = j * 2){}

4、for-each语句

在Java JDK 1.5中还引入了一种更加简洁的、方便对数组和集合进行遍历的方法,即for-each 语句,例子如下:

int array[] = {7, 8, 9};
for (int arr : array) {
    System.out.println(arr);
}

三、跳出语句

Java语言中,有三种跳转语句: break、continue 和return。

1、break语句:

break语句我们在 switch 中已经见到了,它是用于终止循环的操作,实际上break 语句在for、while、do…while循环语句中,用于强行退出当前循环,例如

for(int i = 0;i < 10;i++){
    if(i == 5){
        break;
    }
}

还可以通过添加标签跳出多层循环:

p:for(int j = 0; j < 10 ; j++){
    for(int i = 0;i < 10;i++){
        if(i == 5){
            break p;
        }
    }
}

2、continue语句:

continue也可以放在循环语句中,它与break 语句具有相反的效果,它的作用是用于直接执行下一次循环, 而不是退出当前循环,还以上面的例子为主:

for(int i = 0;i < 10;i++){
    System.out.printl(" i = " + i );
    if(i == 5){
        System.out.printl("continue ... ");
        continue;
    }
}

3、return 语句

public void getName() {
    return name;
}



数组

数组是相同数据类型的多个数据的容器,这些元素按线性顺序排列。所谓线性顺序是指除第一个元素外,每一个元素都有唯一的前驱元素;除最后一个元素外,每一个元素都有唯一的后继元素。(“简单理解就是:一个跟一个顺序排列”)。

1、创建格式:

//格式 1. 数据类型[] 数组名称 = new 数据类型[数组长度];
//格式 2. 数据类型[] 数组名称 = {数组内容 1,数组内容 2,数组内容 3...数组内容 n};
//格式 3. 数据类型[] 数组名;
//格式 3 属于只创建了数组引用名, 并未在内存创建数组空间。
//格式 4. 数据类型[] 数组名称 = new 数据类型[]{内容 1,内容 2,内容 3...内容 n};

int[] a = new int[5];
int[] a = {1,2,3,4,5};
int[] a;
int[] a = new int[]{1,2,3,4,5};

2、下标

数组中内容的数字序号,从 0 开始 ,对于长度为 n 的数组,下标的范围是 0~n-1。我们可以通过下标的方式访问数组中的每一个元素。

int[] arr = new int[10];
arr[5] = 123;
System.out.println(arr[5]);

3、获取数组长度

int len = a.length;

注意:使用数组不当会出现数组未赋值、空指针异常的问题。超出长度的下标操作会导致数组越界异常。数组的长度在创建时就固定了,如果数组已经满了想增加元素只能动态扩容(申请新数组,旧数组拷贝,释放旧数组)。

4、数组常用算法:

冒泡排序:
原理:
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

升序排列:
    最后一个位置放最大值
    外层 循环length-1
    内层循环length-i-1
降序排序:
    最后一个位置放最小值
    外层 循环length-1
    内层循环length-i-1
int[] nums = new int[]{1,3,9,5,6,7,15,4,8};
int target = 6;

//冒泡排序
for(int i = 0; i < nums.length; i++){
    for(int j = 0; j < nums.length - i - 1; j++){
        if(nums[j] > nums[j+1]){
            //可以使用亦或运算避免引入额外变量来交换
            int temp = nums[j+1];
            nums[j+1] = nums[j];
            nums[j] = temp;
        }
    }
}
System.out.println("排序后的数组为");
for(int i = 0; i < nums.length; i++){
    System.out.print(nums[i]+" ");
}
System.out.println("");
二分查找:

二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,二分查找要求数组数据必须采用顺 序存储结构有序排列。

首先,假设数组中元素是按升序排列,将数组中间位置的数据与查找数据比较,如果两者相等,则查找成功;否则利用 中间位置记录将数组分成前、后两个子数组,如果中间位置数据大于查找数据,则进一步查找前子数组,否则进一步查 找后子数组。 重复以上过程,直到找到满足条件的数据,则表示查找成功, 直到子数组不存在为止,表示查找不成功。

//二分查找
int minIndex = 0;
int maxIndex = nums.length - 1;
int midInex = (minIndex + maxIndex)/2;

while (minIndex <= maxIndex){
    if(nums[midInex] == target) return midInex;
    else if(nums[midInex] < target){
        minIndex = midInex + 1;
    }
    else if(nums[midInex] > target){
        maxIndex = midInex - 1;
    }
    midInex = (minIndex + maxIndex)/2;
}
System.out.println("不存在该目标数字");
return -1;
动态扩容:选取模拟实现数组的myList类中的add方法
public void add(Object...elements){
        if(this.length == 0){
            this.element = elements;
            this.length = elements.length; // 一共有多少位置
            this.size = this.length; //当前使用了多少位置
            return;
        }
        if(this.size <= this.size + elements.length){//原本已经有内容了,但是要扩容添加
            this.length = this.size + elements.length;
            Object[] newElement = new Object[this.length];
            int i = 0;
            for( ; i < this.size; i++){
                newElement[i] = element[i];
            }
            System.out.println("i = " + i);
            for(int j = 0; j < elements.length;j++){
                newElement[i] = elements[j];
                i++;
            }
            this.element = newElement;
            this.size = this.length;
        }
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345