Java基础笔记

快速学习Java语言基础笔记

本篇笔记介绍基本很全面,也希望大家在评论区回复我所缺少的
这篇笔记介绍了 标识符 运算符与表达式 流程控制语句(选择控制语句和循环控制语句) 以及数组(一维和多维数组,以及冒泡和选择排序) 等

*(一)标识符

(变量)与数据类型**

Java所有的组成部分都需要名字,如类名、变量名以及方法名,所有这些名称所使用的字符串序列即被称为标识符。
JAVA规定标识符必须由以下部分组成:
 任意顺序字母;
 下划线”-“.
 美元符号”KaTeX parse error: Unexpected character: '' at position 3: ” ̲ 数字 关于JAVA标识符,有…)、或者下划线(_)开始;
 标识符是严格区分大小写的;如:good和Good是不同的标识符;
 标识符不能是Java中保留关键字;

标识符写法
 包名所有字母小写
 类名每个单词首字母大写,其它小写,如:TarenaStudent
 变量和方法:第一个单词小写,从第二个单词开始首字母大写,如:tarenaStudent
 变量通常为名词或名词性短语,方法名通常为动词或动宾短语
 常量:所有字母大写,每个单词之间用 _ 连接
JAVA的关键字
关键字 含义

  1. abstract 表明类或者成员方法具有抽象属性

  2. assert 用来进行程序调试

  3. boolean 基本数据类型之一,布尔类型

  4. break 提前跳出一个块

  5. byte 基本数据类型之一,字节类型

  6. case 用在switch语句之中,表是其中的一个分支

  7. catch 用在异常处理中,用来捕捉异常

  8. char 基本数据类型之一,字符类型

  9. class 类

  10. const 保留关键字,没有具体含义

  11. continue 回到一个块的开始处

  12. default 默认,例如,用在switch语句中,表明一个默认的分支

  13. do 用在do-while循环结构中

  14. double 基本数据类型之一,双精度浮点数类型

  15. else 用在条件语句中,表明当条件不成立时的分支

  16. enum 枚举

  17. extends 表明一个类型是另一个类型的子类型,这里常见的类型有类和接口

  18. final 用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变

  19. finally 用于处理异常情况,用来声明一个基本肯定会被执行到的语句块

  20. float 基本数据类型之一,单精度浮点数类型

  21. for 一种循环结构的引导词

  22. goto 保留关键字,没有具体含义

  23. if 条件语句的引导词

  24. short 基本数据类型之一,短整数类型

  25. static 表明具有静态属性

  26. strictfp 用来声明FP_strict(单精度或双精度浮点数)表达式遵循IEEE 754算术规范

  27. super 表明当前对象的父类型的引用或者父类型的构造方法

  28. switch 分支语句结构的引导词

  29. synchronized 表明一段代码需要同步执行

  30. this 指向当前实例对象的引用

  31. throw 抛出一个异常

  32. throws 声明在当前定义的成员方法中所有需要抛出的异常

  33. transient 声明不用序列化的成员域

  34. try 尝试一个可能抛出异常的程序块

  35. void 声明当前成员方法没有返回值

  36. volatile 表明两个或者多个变量必须同步地发生变化

  37. while 用在循环结构中

  38. implements 表明一个类实现了给定的接口

  39. import 表明要访问指定的类或包

  40. instanceof 用来测试一个对象是否是指定类型的实例对象

  41. int 基本数据类型之一,整数类型

  42. interface 接口

  43. long 基本数据类型之一,长整数类型

  44. native 用来声明一个方法是由与计算机相关的语言(如C/C++/FORTRAN语言)实现的

  45. new 用来创建新实例对象

  46. package 包

  47. private 一种访问控制方式:私用模式

  48. protected 一种访问控制方式:保护模式

  49. public 一种访问控制方式:共用模式

  50. return 从成员方法中返回数据

注释(可以有效的增强代码的可读性与可维护性)
单行注释://开头到本行结束
多行注释以/开头,回车,以/结束.跨列多行
文档注释:以/*开以/结束

(二)运算符和表达式

运算符
运算符分类
1.赋值运算符
操作符 描述 例子
= 简单的赋值运算符,将右操作数的值赋给左侧操作数 C = A + B将把A + B得到的值赋给C

  • = 加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数 C + = A等价于C = C + A
  • = 减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数 C - = A等价于C = C -
    A
  • = 乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数 C * = A等价于C = C * A
    / = 除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数 C / = A等价于C = C / A
    (%)= 取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数 C%= A等价于C = C%A
    << = 左移位赋值运算符 C << = 2等价于C = C << 2

= 右移位赋值运算符 C >> = 2等价于C = C >> 2
&= 按位与赋值运算符 C&= 2等价于C = C&2
^ = 按位异或赋值操作符 C ^ = 2等价于C = C ^ 2
| = 按位或赋值操作符 C | = 2等价于C = C | 2

2.算术运算符

操作符 描述 例子

  • 加法 - 相加运算符两侧的值 A + B 等于 30
  • 减法 - 左操作数减去右操作数 A – B 等于 -10
  • 乘法 - 相乘操作符两侧的值 A * B等于200
    / 除法 - 左操作数除以右操作数 B / A等于2
    % 取余 - 左操作数除以右操作数的余数 B%A等于0
    ++ 自增: 操作数的值增加1 B++ 或 ++B 等于 21
    – 自减: 操作数的值减少1 B-- 或 --B 等于 19

3.自增自减运算符
操作符 描述
自增运算符为++ 自增: 操作数的值增加1
自减运算符为–, 自减: 操作数的值减少1

4.关系运算符
运算符 描述 例子
== 检查如果两个操作数的值是否相等,如果相等则条件为真。 (A == B)为假(非真)。
!= 检查如果两个操作数的值是否相等,如果值不相等则条件为真。 (A != B) 为真。

检查左操作数的值是否大于右操作数的值,如果是那么条件为真。 (A> B)非真。
< 检查左操作数的值是否小于右操作数的值,如果是那么条件为真。 (A <B)为真。
= 检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。 (A> = B)为假。
<= 检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真 (A <= B)为真。
运算符 描述 例子
== 检查如果两个操作数的值是否相等,如果相等则条件为真。 (A == B)为假(非真)。
!= 检查如果两个操作数的值是否相等,如果值不相等则条件为真。 (A != B) 为真。
检查左操作数的值是否大于右操作数的值,如果是那么条件为真。 (A> B)非真。
< 检查左操作数的值是否小于右操作数的值,如果是那么条件为真。 (A <B)为真。
= 检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。 (A> = B)为假。
<= 检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。 (A <= B)为真。

5.逻辑运算符
下表列出了逻辑运算符的基本运算,假设布尔变量A为真,变量B为假
操作符 描述 例子
&& 称为逻辑与运算符。当且仅当两个操作数都为真,条件才为真。 (A && B)为假。
| | 称为逻辑或操作符。如果任何两个操作数任何一个为真,条件为真。 (A | | B)为真。
! 称为逻辑非运算符。用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。 !(A && B)为真。

6.三元运算符
运算符 语法
?: 布尔表达式?表达式1:表达式

运算符优先级
优先级 描述 运算符
1 括号 ()
2 正负号 + -
3 一元运算符 ++ – !
4 乘除 */
5 加减 + -
6 比较大小 >,<, >=, <=
7 比较是否相等 == .!=
8 按位与 &
9 按位或 |
10 逻辑与 &&
11 逻辑或 ||
12 三元运算 ?:
13 赋值运算 =, +=, -=, /=, *=

**

(三)流程控制语句

**
选择控制语句
if
IF条件句有三种形式
1.if条件语句:

if(条件1) {
代码块;
}
执行流程:先计算比较表达式的值,看其返回值是true还是false。 如果是true,就执行语句体;如果是false,就不执行语句体;

2.If……else条件语句
if(条件1) {
代码块1;
}else{
代码块2;
}
执行流程:
首先计算比较表达式的值,看其返回值是true还是false。如果是true,就执行语句体1;如果是false,就执行语句体2;

3.嵌套if ……else 条件语句
if(条件1){
if(条件2){
代码块1;
}else {
代码块2;
}
}else{
代码块3;
}

(多重if条件语句)
if(条件1)
代码块1;
}else if(条件2) {
代码块2;
}else if(条件3) {
代码块3
}
else{
代码块n+1;
}
执行流程:
首先计算比较表达式1看其返回值是true还是false,
如果是true,就执行语句体1,if语句结束。
如果是false,接着计算比较表达式2看其返回值是true还是false,
如果是true,就执行语句体2,if语句结束。
如果是false,接着计算比较表达式3看其返回值是true还是false,
如果都是false,就执行语句体n+1。

Switch
switch语句格式:
switch(表达式){
case 1:
代码块1;
break;
case 2:
代码块1;
break;
case 3:
代码块1;
break;

         ......
  default:
          代码块n+1;
         break;

执行流程:
1.计算表达式的值;
2.将得到的值依次与case后的值进行匹配,一旦匹配成功则执行相应的语句体,遇到break则结束;
3.若是都不匹配,则执行语句体n+1,遇到break则结束;
注意:

  1. switch中case的参数类型只能是int byte,short,char, string(jdk1.7开始支持string) enmu(举)(jdk1.5支持)类型。
    2.case可以多个,并且case后选择必须是直接值。
    3.break是用来跳出整个switch语句的,如果没有,将执行下一分支。
    default不一定写在最后,可以放在switch分支语句的任意位置
    循环控制语句
    循环语句是流程控制中最复杂,也是最有用、最难掌握的语句,在最初接触时,首先要熟悉基本的语法,然后需要能够快速观察出流程的规律,这个观察能力需要依靠大量的阅读和编写程序进行培养,这就是基本的逻辑思维,然后将该规律描述出来即可。所以在学习循环语句时,学习语法只是基本的内容,更多的是培养自己观察规律的能力
    While
    while关键字的中文意思是“当……的时候”,也就是当条件成立时循环执行对应的代码。while语句是循环语句中基本的结构
    while语句语法格式:
    while(循环条件){
    循环体;
    }
    执行流程:
    在执行while语句时,首先判断循环条件,如果循环条件为false,则直接执行while语句后续的代码,如果循环条件为true,则执行循环体代码,然后再判断循环条件,一直到循环条件不成立为止。
    例:
    while(true){
    System.out.println(‘a’);
    }

do……while

解释:
在do-while语句中,循环体部分是重复执行的代码部分,循环条件指循环成立的条件,要求循环条件是boolean类型,值为true时循环执行,否则循环结束,最后整个语句以分号结束。
do{
循环体;
}while(循环条件);
执行流程:当执行到do-while语句时,首先执行循环体,然后再判断循环条件,如果循环条件不成立,则循环结束,如果循环条件成立,则继续执行循环体,循环体执行完成以后再判断循环条件,依次类推。
例: int i = 1;
int result = 1;
do{
result *= i;
i++;
}while(i <= 5);
System.out.println(result)

for
for关键字的意思是“当…的时候”,是实际开发中比较常用的循环语句
解释:
 和其它流程控制语句一样,语句中的大括号不是语法必须的,但是为了结构清楚以及在循环体部分可以书写多行代码,一般使用大括号。
 初始化语句作用是在循环开始以前执行,一般书写变量初始化的代码,例如循环变量的声明、赋值等。该语句可以为空。
 循环条件是循环成立的条件,要求必须为boolean类型,如果该条件为空,则默认为true,即条件成立。
 迭代语句是指循环变量变化的语句,一般书写i++、i—这样的结构,当然,该语句也可以为空5、 循环体指循环重复执行的功能代码。

for(初始化语句;循环条件;迭代语句){
循环体;
}
执行流程:

  1. 执行初始化语句
  2. 判断循环条件,如果循环条件为false,则结束循环,否则执行下一步
  3. 执行循环体
  4. 执行迭代语句
  5. 跳转到步骤2重复执行需要注意的是:for语句中的各个语句都可以为空,初始化语句在for语句执行时执行且只执行一次。

循环控制进阶及流程跳转语句
嵌套循环是把一个循环放入另一个循环中去,任何类型的循环之间都可以相互嵌套,比如
Do….while循环齐奥淘套for循环,for循环嵌套for循环,while循环嵌套for循环.
写个for循环乘法口诀
for(int i;i<=9;i++){//外层控制行数,也就是控制乘数
for(int j;j=1;j++){ 内层循环控制列,控制被乘数
system.out.print(j+””+i+”=”+jI+”\t”);//输出信息
}
//换行
Sytem.out.println();

跳转语句:
用于实现循环执行过程中程序流程跳转,在Java循环中提供两种跳转语句,分别是break语句和continue语句
Break:
循环体一旦遇到break,整个循环就就结束了
实例
public class xxx{
public static void main(String[] args) {
For(int i;i<10;I++){
If(I5){//结束所有循环(当i5时,整个循环结束)
Break;
}
Sytem.out.println(I+”,”);
}
}
}
Continue
再循环语句中,它的作用是终止本次循环,执行下一个循环体.
例:1~100之间奇数求和
public class xxx{
public static void main(String[] args) {
Int sun=0;
For(int i=1;i<=100;i++){
If(i%2==0){
Continue;//结束本次循环
}
Sum+=I;//实现sun和i的累加
}
System.out.printlin(“1~100奇数和为:”+sum);
}
}

(四)数组

一维数组

数组概述
数组是编程语言中最常见的数据结构,用来储存多个数据,是具有相同数据类型的一组数据集合.
组分为:一维数组和多维数组(多维数组又分为二维数组和三维数组等).简单来说,一维数组中存放的元素是基本数据类型,二维数组中存放的是一维数组.

语法:1
数组类型[ ] 数组名;
例:声明INT类型,元素都是INT类型
INT[ ] A

语法2:
数组元素类型 数组名[ ];
L
例:声明DOUBLE类型,
DOUBLE[ ] B;

数组初始化

  1. 静态初始化:由程序员先指定数组元素的初始值,数组长度由元素决定
    语法:

  2. 声明数组:
    数组元素类型[] 数组名;

  3. 第二:静态初始化
    数组名=new 数组元素类型[]{元素1,元素2,……}
    例:
    Int[] a;
    a = new int[]{1,2,3,4,};

  4. 动态初始化: 由程序员先指定长度,根据数组的数据类型元素分配初始值
    语法:
    数组元素名 [] 数组名= new 数组元素类型[数组长度]
    注意:动态和静态不能一起用,也就是说给数组长度的时候,不能给数组值
    例:
    声明数组和初始化数组放在一起
    初始化数组长度5的double的一维数组,数组默认元素为0.0;
    Double[] arr=new double[5]
    Arr[0]=10.2;
    Arr[0]=15.4
    Arr[0]=20.5
    Arr[0]=24.5
    Arr[0]=30.4

数组的使用

  1. 数组长度:
    通过length可以获取数组长度
    语法: 数组名.length;
  2. 访问数组
    通过数组下标,快捷访问数组中的元素
    语法:数组名[下标]
    例:
    public class xxx{
    public static void main(String[] args) {
    Double[ ] d={10.1,10.2,10.3,10.4};
    System.out printlin (d[0]); //访问数组d的第一个元素
    注意:
    访问数组是,下标不能超过下标范围,虽然编译不会报错,但是运行会异常
  3. 遍历数组
    public class xxx{
    public static void main(String[] args) {
    Int [] a={1,2,3,4,5};
    Int sun=0;//数组元素之和;
    //遍历数组
    System.out printlin (”数组元素”);
    For (int i=0;i<a.length;i++){
    System.out printlin (a[i]+”.”);
    }
    //换行
    System.out printlin;
    For (int i=0;i<a.length;i++){
    Sum=sun+a[i];
    }
    System.out printlin (”数组元素之和:”+sum);
    二维数组
    定义和使用
    二维数组是一种特殊的形式的一位数组,二维数组的每个元素都是一个一维数组’

二维数组初始化:
静态初始化:由程序员指定二维数组中的元素初始值,数组长度由系统决定
语法
数组元素类型[][] 数组名;//声明二维数组
数组名= new 数组元素类型[][]{{元素1,元素2….},{元素1,元素2….} …}

例:
    Int [] []  a;
   A=new int [][]{{1,2,3},{4,5,6},{7,8,9}};

第二种静态语法,必须要把声明数组和初始化放在一起,否则报错
Int[][] arr={{1,2,3},{4,5,6}};

动态初始化: 由程序员指定二维数组的长度,系统根据数组数据类型给数组元素分配初始值
解释:不需要程序员指定二维数组中一维数组元素的值,秩序要指定长度即可
语法:
例:
Double[][] arr=new double[2][2];// 声明数组
// 2.数组元素类型[][] 数组名=new 数组元素类型[数组长度][数组长度];
Arr[0][0]=10.2;//
Arr[0][1]=15.4;
Arr[1][0]=20.5;
Arr[1][1]=24.5;
使用二维数组
1访问数组;
数组名[行下标m] [列下标n] //m/n下标都是从零开始
public class xxx{
public static void main(String[] args) {
int[][] arr = {{1,2,3},{4,5,6},{1,2},{0}};
//对数组元素进行访问
System.out.println(arr[0][1]);
System.out.println(arr[1][1])
}
}
数组输出:
2,
5
2.遍历数组:
public class xxx{
public static void main(String[] args) {
//首先定义一个二维数组
int[][] arr = new int[][]{{1,2,3},{4,5,6},{7,8,9}};
//其次我们依次遍历二维数组中的一维数组元素
//遍历第一个一维数组
System.out.println(“普通输出:”);
for(int i=0;i<arr[0].length;i++){
System.out.print(arr[0][i]+" “);
}
System.out.println();//每执行完一个一维数组换行
//遍历第二个一维数组
for(int i=0;i< arr [1]. Length ;i++){
System.out.print(arr[1][i]+” “);
}
System.out.println();//每执行完一个一维数组换行
//遍历第三个一维数组
for(int i=0;i<arr[2].length;i++){
System.out.print(arr[2][i]+” “);
}
System.out.println();
System.out.println(“改进后:”);
//上面三式子可视代码相似,所以我们对其进行改进化简
for(int a=0;a<arr.length;a++){//控制每个一维数组
for(int i=0;i<arr[a].length;i++){//控制每个一维数组中的元素
System.out.print(arr[a][i]+” “);//输出每个元素的值
}
System.out.println();//每执行完一个一维数组换行
}
}
}
数组输出:
1 ,2, 3,
4 ,5 ,6,
7, 8, 9,
冒泡排序
排序方式:
总是将小数往前放,大的数往后放,类似水中的气泡上升的过程,
基本思想:
对比相邻元素,如果满足条件就交换元素,把较小的元素放在前面,较大的元素放后面.
运算过程:
冒泡排序算法的运作如下:
1、比较相邻的元素。如果第1个比第2个大(小),就交换他们两个。
2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大(小)的数。
3、除去最后一个元素外,其他元素重复以上步骤
4、持续每次对越来越少的元素(无序元素)重复上面的步骤,直到没有任何一对数字需要比较,则序列最终有序。
分析
以数组 arr = [5, 1, 4, 2, 8] 为例说明,加粗的数字表示每次循环要比较的两个数字:
第一次外循环
( 5 1 4 2 8 ) → ( 1 5 4 2 8 ), 5 > 1 交换位置
( 1 5 4 2 8 ) → ( 1 4 5 2 8 ), 5 > 4 交换位置
( 1 4 5 2 8 ) → ( 1 4 2 5 8 ), 5 > 2 交换位置
( 1 4 2 5 8 ) → ( 1 4 2 5 8 ), 5 < 8 位置不变
第二次外循环(除开最后一个元素8,对剩余的序列)
( 1 4 2 5 8 ) → ( 1 4 2 5 8 ), 1 < 4 位置不变
( 1 4 2 5 8 ) → ( 1 2 4 5 8 ), 4 > 2 交换位置
( 1 2 4 5 8 ) → ( 1 2 4 5 8 ), 4 < 5 位置不变
第三次外循环)
( 1 2 4 5 8 ) → ( 1 2 4 5 8 )
例:
public class xxx {
public static void main(String[] args) {
int [] a={6,4,7,2,8,1};//定义数组
//控制数组中元素排序的趟数
for(int i=0;i<a.length-1;i++){
//将指定元素依次与数组中其他元素对比
for(int j = 0; j < a.length-1-i; j++) {
if (a[j]>a[j+1]){
//保存较大元素
int temp=a[j];
//较小往前移
a[j]=a[j+1];
//较大的往后移
a[j+1]=temp;
}
}
}
//将排序后的元素循环
for (int z = 0; z < a.length; z++) {
System.out.println(a[z]+” ");

	}

}
}
运行结果:
1
2
4
6
7
8
选择排序
基本思想:
将指定的排序位置与其他数组元素分别对比,满足条件就交换,
注意:和冒泡排序区别,不是交换相邻元素,而是把满足条件的元素交换到指定位置,
选择排序速度比冒泡排序快一些,和冒泡排序差不多,只是冒牌排序发现较小数据的时候就交换,而选择排序只有在确定了最小的数据之后猜会发生交换
算法实例
原始数组: 5 2 8 4 9 1
第一次:将最小的数据1放在首位,也就是1和5换;
结果:1 2 8 4 9 5;
第二次:将除1以外的数据(2 8 4 9 5)比较,2最小
结果1 2 8 4 95
第三次:将除1 2 以外的数据(8 4 9 5)比较,4小,8和4换位;
结果1 2 4 8 9 5
第四次:将除1 2 4以外的数据(8 9 5)比较,8和5换位
结果1 2 4 5 9 8
第五次:将1 2 4 5 以外的数据(9 ,8 )进行比较,8小,8和9换位置
结果1 2 4 5 8 9

例:
public class xxx {
public static void main(String[] args) {
int [] arr={1,3,2,45,65,33,12};//定义数组
System.out.println(“交换前”);
//遍历数组
for(int z=0;z<arr.length;z++){
System.out.println(arr[z]+" “);
}
//使用选择排序进行排序
//控制趟数
for(int i=0;i<a.length-1;i++){
//比较数组元素
for(int j=j+1; j < a.length; j++) {
if (arr[i]>arr[j]){
//保存较大元素
int temp=arr[i];
//较小往前移
arr[i]=arr[j];
//较大的往后移
arr[j]=temp;
}
}
}
System.out.println(“交换后”);
//遍历数组元素
for (int z = 0; z < arr.length; z++) {
System.out.println(arr[z]+” ");
}
}
}
运行结果:
交换前:
1 3 2 45 65 33 12
交换后:
1 2 3 12 33 45 65

好了,java基础就到这,后期会继续发送Java面对象笔记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值