Java编程基础
- Java中的注释
- Java中的标识符
- Java中的关键字
- Java中的常量
- 常量类型
- 定义常量
- java中的变量
- 变量的定义及其数据类型
- 变量的类型转换
- 变量的作用域
- java运算符
- 算术运算符
- 赋值运算符
- 比较运算符
- 逻辑运算符
- 位运算符
- 运算符的优先级
- java流程控制语句
- if条件语句
- switch条件语句
- while循环语句
- for循环语句
- 循环嵌套
- 跳转语句(break语句)
- 跳转语句(continue语句)
- java中的方法
- 方法的定义
- 方法的重载
- 方法的递归
- java中的数组
- 数组的定义
- 数组的常见操作
- 数组的遍历
- 数组的最值
- 数组的排序
- 多维数组的定义及使用
- 二维数组
- 多维数组
个人笔记②
Java中的注释
Java 注解(Annotation)又称 Java 标注, Java 语言中的类、方法、变量、参数和包等都可以被标注。
Java 文档注释 Java 支持三种注释方式。前两种分别是 // 和 /* /,第三种被称作说明注释,它以 /* 开始,以 */结束。 说明注释允许你在程序中嵌入关于程序的信息。
作用:
1.对程序进行说明
2.调试程序
单行注释//
注释“//”后面的整行
注释/* */
多行注释,从"/“开始到”/"结束的内容全部被注释
多行注释不要进行嵌套
说明注释/** */
它以 /** 开始,以 */结束
结果展示
下列关于多行注释的说法中,正确的是( )
A、多行注释中不能嵌套单行注释
B、多行注释中可以嵌套多行注释
C、多行注释中不可以有分号,逗号,括号等符号
D、多行注释中可以没有换行
Java中的标识符
Java 中标识符是为方法、变量或其他用户定义项所定义的名称。标识符可以有一个或多个字符。在 Java 语言中,标识符的构成规则如下。
标识符由数字(0-9)和字母(A~Z 和 a~z)、美元符号($)、下划线(_)以及 Unicode 字符集中符号大于 0xC0 的所有符号组合构成(各符号之间没有空格)。
标识符的第一个符号为字母、下划线和美元符号,后面可以是任何字母、数字、美元符号或下划线。
另外,Java 区分大小写,因此 myvar 和 MyVar 是两个不同的标识符。
注意事项
标识符命名时,切记不能以数字开头,也不能使用任何 Java 关键字作为标识符,而且不能赋予标识符任何标准的方法名。
标识符分为两类,分别为关键字和用户自定义标识符。
关键字是有特殊含义的标识符,如 true、false 表示逻辑的真假。
用户自定义标识符是由用户按标识符构成规则生成的非保留字的标识符,如 abc 就是一个标识符。
提示:
使用标识符时一定要注意,或者使用关键字,或者使用自定义的非关键字标识符。此外,标识符可以包含关键字,但不能与关键字重名。
例如以下合法与不合法标识符。
合法标识符:date、KaTeX parse error: Expected group after '_' at position 13: 2011、_date、D_̲date 等。
不合法的标识符:123.com、2com、for、if 等。
标识符用来命名常量、变量、类和类的对象等。因此,一个良好的编程习惯要求命名标识符时,应赋予它一个有意义或有用途的名字。
对类名标识符举例
Java中的关键字
关键字(或者保留字)是对编译器有特殊意义的固定单词,不能在程序中做其他目的使用。关键字具有专门的意义和用途,和自定义的标识符不同,不能当作一般的标识符来使用。
Java 语言目前定义了 51 个关键字,这些关键字不能作为变量名、类名和方法名来使用。以下对这些关键字进行了分类。
1.数据类型:boolean、int、long、short、byte、float、double、char、class、interface。
2.流程控制:if、else、do、while、for、switch、case、default、break、continue、return、try、catch、finally。
3.修饰符:public、protected、private、final、void、static、strict、abstract、transient、synchronized、volatile、native。
4.动作:package、import、throw、throws、extends、implements、this、supper、instanceof、new。
5.保留字:true、false、null、goto、const。
提示:由于 Java 区分大小写,因此 public 是关键字,而 Public 则不是关键字。但是为了程序的清晰及可读性,要尽量避免使用关键字的其他形式来命名。
题目
1.下列选项中,用于引入包的关键字是
A、class
B、import
C、package
D、static
2.下列选项中,不属于Java中关键字的是
A、const
B、for
C、Final
D、class
Java中的常量
常量是指在程序的整个运行过程中值保持不变的量。
常量类型
整型常量值(所有整数):int,short,long
整数默认int
Java 的整型常量值主要有如下 3 种形式。
十进制数形式:如 54、-67、0。
八进制数形式:Java 中的八进制常数的表示以 0 开头,如 0125 表示十进制数 85,-013 表示十进制数 -11。
十六进制数形式:Java 中的十六进制常数的表示以 0x 或 0X 开头,如 0x100 表示十进制数 256,-0x16 表示十进制数 -22。
实型常量值(所有实数,整数和小数):float,double
实数默认为double
Java 的实型常量值主要有如下两种形式。
十进制数形式:由数字和小数点组成,且必须有小数点,如 12.34、-98.0。
科学记数法形式:如 1.75e5 或 32&E3,其中 e 或 E 之前必须有数字,且 e 或 E 之后的数字必须为整数。
Java 实型常量默认在内存中占 64 位,是具有双精度型(double)的值。如果考虑到需要节省运行时的系统资源,而运算时的数据值取值范围并不大且运算精度要求不太高的情况,可以把它表示为单精度型(float)的数值。
单精度型数值一般要在该常数后面加 F 或 f,如 69.7f,表示一个 float 型实数,它在内存中占 32 位(取决于系统的版本高低)。
布尔型常量值:boolean
Java 的布尔型常量只有两个值,即 false(假)和 true(真)。
字符型和字符串常量值:char,string
Java 的字符型常量值是用单引号引起来的一个字符,如 ‘e’、E’。需要注意的是,Java 字符串常量值中的单引号和双引号不可混用。双引号用来表示字符串,像 “11”、“d” 等都是表示单个字符的字符串。
除了以上所述形式的字符常量值之外,Java 还允许使用一种特殊形式的字符常量值来表示一些难以用一般字符表示的字符,这种特殊形式的字符是以开头的字符序列,称为转义字符。
定义常量
Java 语言使用 final 关键字来定义一个常量,其语法如下所示:
final dataType variableName = value
其中,final 是定义常量的关键字,dataType 指明常量的数据类型,variableName 是变量的名称,value 是初始值。
实例:
final int y = 10;
题目
1、下列选项中,属于浮点数常量的是?( )
A、198
B、2e3f
C、true
D、N
2、下列选项中,哪个是八进制043的十六进制表示形式( )
A、0x43
B、0x23
C、23
D、0x32
3、下列选项中,属于布尔常量的是?( )
A、198
B、2e3f
C、true
D、N
java中的变量
常量和变量是 Java 程序中最基础的两个元素。常量的值是不能被修改的,而变量的值在程序运行期间可以被修改。
定义变量是为了运算。
变量的定义及其数据类型
声明变量
对开发人员来说,变量是用来描述一条信息的别名,可以在程序代码中使用一个或多个变量。变量中可以存储各种类型的信息
如下代码分别声明了 String、boolean 和 int 类型的变量。
String employee; // String 类型的变量
boolean isSave; // boolean 类型的变量
int create_at; // int 类型的变量
变量赋值
初始化变量是指为变量指定一个明确的初始值。初始化变量有两种方式:一种是声明时直接赋值,一种是先声明、后赋值。如下代码分别使用两种方式对变量进行了初始化。
例子
变量是类或者结构中的字段,如果没有显式地初始化,默认状态下创建变量并默认初始值为 0。
方法中的变量必须显式地初始化,否则在使用该变量时就会出错。
题目
1、下列关于int类型变量的定义,错误的是( )
A、int a=10;
B、int b,c=20;
C、int d=e=30;
D、int f=40;
2、下列选项中,哪一个不能通过编译( )
A、byte a=1;
B、short b=100;
C、int c=‘a’;
D、long d=8888888888;
3、下列关于数据类型的说法中,错误的是
A、Java中的数据类型分为基本数据类型和引用数据类型
B、int类型数据占4个字节
C、浮点数类型变量不能赋予一个整数数值
D、布尔类型的变量只有true和false这两个值
变量的类型转换
无法从强类型转换为弱类型,却可以从弱类型向着强类型转换
下面应该是从byte转变为int(截图时编写错误)
强制转换:
自动转换:
1.当java程序在进行赋值或运算时,精度小的类型自动转换为精度(容量)大的数据类型,这个就是自动类型转换。
2. 数据类型按精度大小排序为:
(1)char——>int——>long——>float——>double
(2)byte——>short——>int——>long——>float——>double
题目
1、下列选项中,按照箭头方向,不可以进行自动类型转换的是
A、byte → int
B、int → long
C、double →long
D、short → int
2、下列数据类型中,哪种数据类型转为int类型需要进行强制转换
A、byte
B、short
C、char
D、float
3、下列选项中,按照箭头方向,可以进行自动类型转换的是
A、char → int
B、short → char
C、float → long
D、char → short
变量的作用域
静态变量、全局变量和局部变量
成员变量:Java 的成员变量有两种,分别是全局变量和静态变量(类变量)
局部变量
局部变量是指在方法或者方法代码块中定义的变量,其作用域是其所在的代码块。可分为以下三种:
方法参数变量(形参):在整个方法内有效。
方法局部变量(方法内定义): 从定义这个变量开始到方法结束这一段时间内有效。
代码块局部变量(代码块内定义):从定义这个变量开始到代码块结束这一段时间内有效。
实例
题目
1、下列关于变量作用域的说法中,正确的是
A、在main()方法中任何位置定义的变量,其作用域为整个main()方法
B、块中定义的变量,在块外也是可以使用的
C、变量的作用域为:从定义处开始,到变量所在块结束位置
D、变量的作用域不受块的限制
2、阅读下段代码片段,选择正确的运行结果
public static void main(String[] args) {
{
int a = 1;
System.out.print(a);
}
{
int a = 2;
System.out.print(a);
}
int a = 3;
System.out.print(a);
}
A、123
B、111
C、121
D、编译不通过
java运算符
计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量。
算术运算符
一元运算符
算术一元运算一共有 3 个,分别是 -、++ 和 --。
举例
先赋值,再自加
先自加,再赋值
二元运算符
Java 语言中算术运算符的功能是进行算术运算,除了经常使用的加(+)、减(-)、乘(*)和除(\)外,还有取模运算(%)。
实例
算术赋值运算符算术赋值运算符只是一种简写,一般用于变量自身的变化
题目
1、表达式3510/1000的运算结果为
A、3
B、3.51
C、3.510
D、4
2、表达式7%(-3)的运算结果为
A、-2
B、-1
C、2
D、1
赋值运算符
赋值运算符是指为变量或常量指定数值的符号。赋值运算符的符号为“=”,它是双目运算符,左边的操作数必须是变量,不能是常量或表达式。
不要将赋值运算符与相等运算符“==”混淆。
赋值运算符和算数运算符组成的复合赋值运算的含义及其使用实例:
结果
题目
1、下列选项中,不属于赋值运算符的是
A、-=
B、=
C、==
D、*=
比较运算符
大于、等于、不等于。. 比较的结果是一个布尔值( true 或 false )。. Java 中常用的比较运算符如下表所示:
.注意:.
1、 > 、 < 、 >= 、 <= 只支持左右两边操作数是数值类型.
2、 == 、 != 两边的操作数既可以是数值类型,也可以是引用类型.
特点:
比较运算符的结果都是boolean类型。运算完的结果,要么true,要么false。
题目
1、下列选项中,不属于比较运算符的是
A、=
B、==
C、<
D、<=
逻辑运算符
逻辑运算符把各个运算的关系表达式连接起来组成一个复杂的逻辑表达式,以判断程序中的表达式是否成立,判断的结果是 true 或 false。
逻辑运算符的用法、含义及实例
&& 与 & 区别:如果 a 为 false,则不计算 b(因为不论 b 为何值,结果都为 false)
|| 与 | 区别:如果 a 为 true,则不计算 b(因为不论 b 为何值,结果都为 true)
即&和|两边都参与运算
位运算符
位逻辑运算符包含 4 个:&(与)、|(或)、~(非)和 ^(异或)。除了 ~(即位取反)为单目运算符外,其余都为双目运算符。
位运算符主要用来对操作数二进制的位进行运算。
位逻辑运算符:
位移运算符
位移运算符用来将操作数向某个方向(向左或者右)移动指定的二进制位数。
左移位运算符为«,其运算规则是:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。
右移时原高位是什么,空位就补什么
有>>>表示无符号右移,无论原高位是什么,空位都补零。
复合位赋值运算符
所有的二进制位运算符都有一种将赋值与位运算组合在一起的简写形式。复合位赋值运算符由赋值运算符与位逻辑运算符和位移运算符组合而成。
题目
1、下列选项中,不属于位运算符的是
A、&
B、!
C、^
D、|
2、将十进制的6与11进行异或运算的结果为
A、11
B、12
C、13
D、14
3、下列选项中,关于运算符“^”的描述正确是
A、二进制位有1,则结果为1
B、二进制位有0,则结果为0
C、二进制位有相同,则结果为1,不同为0
D、二进制位有相同,则结果为0,不同为1
运算符的优先级
一般而言,单目运算符优先级较高,赋值运算符优先级较低。算术运算符优先级较高,关系和逻辑运算符优先级较低。多数运算符具有左结合性,单目运算符、三目运算符、赋值运算符具有右结合性。
运算符的优先级: 1 级最高,14 级最低
java流程控制语句
从结构化程序设计角度出发,程序有 3 种结构:顺序结构、选择结构和循环结构。
if条件语句
Java 支持两种选择语句:if 语句和 switch 语句。其中 if 语句使用布尔表达式或布尔值作为分支条件来进行分支控制.
if 选择结构是根据条件判断之后再做处理的一种语法结构。默认情况下,if 语句控制着下方紧跟的一条语句的执行。不过,通过语句块,if 语句可以控制多个语句。
实例
题目
1、假设x为int类型,那么下列选项中可以作为if语句的判断条件的是( )
A、x = 4
B、x & 3
C、x++
D、x<10
2、请阅读下面的程序
public class Example03 {
public static void main(String[] args) {
int x = 8;
if (x > 5) {
System.out.println(“a”);
} else {
System.out.println(“b”);
}
}
}
程序的运行结果是?()
A、true
B、false
C、a
D、b
3、下列关于条件语句的描述,错误的是( )
A、if语句中的条件表达式是一个布尔值
B、选择语句分为if条件语句和switch条件语句
C、switch语句中的表达式只能是布尔类型的值
D、switch语句只能针对某个表达式的值作出判断
switch条件语句
switch 语句则用于对多个整型值进行匹配,从而实现分支控制。
1)switch
表示“开关”,这个开关就是 switch 关键字后面小括号里的值,小括号里要放一个整型变量或字符型变量。表达式必须为 byte,short,int,char类型。
2)case
表示“情况,情形”,case 标签可以是:
类型为 char、byte、 short 或 int 的常量表达式。
枚举常量。
3)default
表示“默认”,即其他情况都不满足。default 后要紧跟冒号,default 块和 case 块的先后顺序可以变动,不会影响程序执行结果。通常,default 块放在末尾,也可以省略不写。
4)break
表示“停止”,即跳出当前结构。
实例
没有 break 语句
if和Switch的特点与区别:
if可以判断数值,也可以判断区间。只要运算结果是boolean,都可以进行判断。
switch用于对固定的几个值进行判断。判断的值的类型有限
while循环语句
循环是程序中的重要流程结构之一。循环语句能够使程序代码重复执行,适用于需要重复一段代码直到满足特定条件为止的情况。
Java 中采用的循环语句与C语言中的循环语句相似,主要有 while、do-while 和 for。
while 语句
while 语句是 Java 最基本的循环语句,是一种先判断的循环结构,可以在一定条件下重复执行一段代码。该语句需要判断一个测试条件,如果该条件为真,则执行循环语句(循环语句可以是一条或多条),否则跳出循环。
表达式:
while(条件表达式) {
语句块;
}
while实例:
do-while 语句
do-while 循环语句的特点是先执行循环体,然后判断循环条件是否成立。
表达式:
do {
语句块;
}while(条件表达式);
do-while实例:
for循环语句
for 语句是应用最广泛、功能最强的一种循环语句。大部分情况下,for 循环可以代替 while 循环、do while 循环。
for 语句是一种在程序执行前就要先判断条件表达式是否为真的循环语句。假如条件表达式的结果为假,那么它的循环语句根本不会执行。for 语句通常使用在知道循环次数的循环中。
表达式:
for(条件表达式1;条件表达式2;条件表达式3) {
语句块;
}
基本步骤
实例:
for、do-while和while的区别
循环嵌套
嵌套循环既可以是 for循环嵌套 while 循环,也可以是 while 循环嵌套 do-while 循环 …… 即各种类型的循环都可以作为外层循环,也可以作为内层循环。
举例:
题目
请阅读下面的程序
public class Test {
public static void main(String[] args) {
int temp = 0;
for (int i = 1; i < 5; i++) {
for (int j = 0; j < i; j++) {
temp++;
}
}
System.out.println(temp);
}
}
下列选项中,哪一个是正确的运行结果( )
A、5
B、9
C、10
D、15
跳转语句(break语句)
break 用于完全结束一个循环,跳出循环体。不管是哪种循环,一旦在循环体中遇到 break,系统将完全结束该循环,开始执行循环之后的代码。
break是跳出循环
跳转语句(continue语句)
continue 语句是 break 语句的补充。
continue 语句是跳过循环体中剩余的语句而强制执行下一次循环,其作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。
实例
题目
下列关于continue语句的说法中,正确的是
A、continue语句可以在选择语句中使用
B、continue语句可以在条件语句中使用
C、continue语句可以在循环语句中使用
D、continue语句可以在任何语句中使用
java中的方法
Java方法是语句的集合,它们在一起执行一个功能。
方法是解决一类问题的步骤的有序组合
方法包含于类或对象中
方法在程序中被创建,在其他地方被引用
函数的定义
习惯把函数也叫成方法,都是一个意思;函数是具备特定功能的一段代码块,解决了重复性代码的问题。
方法的定义
方法的优点
- 使程序变得更简短而清晰。
- 有利于程序维护。
- 可以提高程序开发的效率。
- 提高了代码的重用性。
定义
修饰符 返回值类型 方法名(参数类型 参数名){
…
方法体
…
return 返回值;
}
实例
下面的方法包含 2 个参数 num1 和 num2,它返回这两个参数的最大值。
/** 返回两个整型变量数据的较大值 */
public static int max(int num1, int num2) {
return num1 > num2 ? num1 : num2;
}
在主函数main()中调用方法max()
题目
1、当一个方法不需要返回数据时,返回类型必须是
A、boolean
B、int
C、char
D、void
方法的重载
引入:上面使用的max方法仅仅适用于int型数据。但如果你想得到两个浮点类型数据的最大值呢?
重载代码
public static double max(double num1, double num2) {
if (num1 > num2)
return num1;
else
return num2;
}
意义及使用
你调用max方法时传递的是int型参数,则 int型参数的max方法就会被调用;
如果传递的是double型参数,则double类型的max方法体会被调用,这叫做方法重载;
就是说一个类的两个方法拥有相同的名字,但是有不同的参数列表。
方法的递归
程序调用自身的编程技巧称为递归(recursion),它做为一种算法在程序设计语言中广泛应用。Java 支持递归,在 Java 编程中,递归是允许方法调用自身调用的属性。调用自身的方法称为是递归的。
实例
java中的数组
数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。
Java 语言中提供的数组是用来存储固定大小的同类型元素。
数组的定义
数组具有如下三个基本特性:
一致性:数组只能保存相同数据类型元素,元素的数据类型可以是任何相同的数据类型。
有序性:数组中的元素是有序的,通过下标访问。
不可变性:数组一旦初始化,则长度(数组中元素的个数)不可变。
特点:
数组可以是一维数组、二维数组或多维数组。
数值数组元素的默认值为 0,而引用元素的默认值为 null。
数组的索引从 0 开始,如果数组有 n 个元素,那么数组的索引是从 0 到(n-1)。
数组元素可以是任何类型,包括数组类型。
数组类型是从抽象基类 Array 派生的引用类型。
定义
dataType[] arrayRefVar; // 首选的方法
或
dataType arrayRefVar[]; // 效果相同,但不是首选方法
具体定义方式:
元素类型 [] 数组名=new 元素类[元素个数或数组长度]
int [] arr=new int[3]
题目
1、下面哪种写法可以实现访问数组arr的第1个元素?
A、arr[0]
B、arr(0)
C、arr[1]
D、arr(1)
2、int a[ ]={45,4,67,23,65,87,34,52,56};数组中a[5]的值为( )
A、23
B、45
C、65
D、87
3、声明一个数组,__[ ] a = new String[]{};空格处应该填写的的内容为()
A、int
B、double
C、String
D、string
数组的常见操作
数组的遍历
获取数组中的所有元素——遍历
1.for循环遍历
2.Arrays工具类中toString静态方法遍历
3.foreach语句遍历
数组的最值
求最大值
遍历的元素只要比max大,就用max记录起来。遍历到最后的max即为最大值
数组的排序
1.冒泡排序法(非常重要)
冒泡排序的基本思想是:对比相邻的元素值,如果满足条件就交换元素值,把较小的元素值移动到数组前面,把大的元素值移动到数组后面(也就是交换两个元素的位置),这样数组元素就像气泡一样从底部上升到顶部。
举例
对**int [] arr={3,1,2};**排序
int [] arr={3,1,2};
2.快速排序(Quicksort)是对冒泡排序的一种改进,是一种排序执行效率很高的排序算法。
快速排序的基本思想是:通过一趟排序,将要排序的数据分隔成独立的两部分,其中一部分的所有数据比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此使整个数据变成有序序列。
具体做法是:假设要对某个数组进行排序,首先需要任意选取一个数据(通常选用第一个数据)作为关键数据,然后将所有比它小的数都放到它的前面,所有比它大的数都放到它的后面。这个过程称为一趟快速排序;递归调用此过程,即可实现数据的快速排序。
使用选择排序法
也可以对上述数组中的元素进行排序,但是它与冒泡排序不同。选择排序是指每一趟从待排序的数据元素中选出最大(或最小)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
直接插入排序的基本思想是:
将 n 个有序数存放在数组 a 中,要插入的数为 x,首先确定 x 插在数组中的位置 p,然后将 p 之后的元素都向后移一个位置,空出 a§,将 x 放入 a§,这样可实现插入 x 后仍然有序。
多维数组的定义及使用
二维数组
在 Java 中二维数组被看作数组的数组,即二维数组为一个特殊的一维数组,其每个元素又是一个一维数组。Java 并不直接支持二维数组,但是允许定义数组元素是一维数组的一维数组,以达到同样的效果。
表达式声明:
type arrayName[][]; // 数据类型 数组名[][];
或
type[][] arrayName; // 数据类型[][] 数组名;
三种方式声明
int[][] temp = new int[][]{{1,2},{3,4}};
int[][] temp = new int[2][2];
int[][] temp = new int[2][];
运行实例
多维数组
除了一维数组和二维数组外,Java 中还支持更多维的数组,如三维数组、四维数组和五维数组等,它们都属于多维数组。
想要提高数组的维数,只要在声明数组时将索引与中括号再加一组即可,所以三维数组的声明为 int score[][][],而四维数组为 int score[][][][],以此类推。
举例
题目
1、下列选项中关于二维数组的定义,格式错误的是( )
A、int[][] arr = new int[3][4]
B、int[][] arr = new int[3][]
C、int[][] arr = new int[][4]
D、int[][] arr = {{1,2},{3,4,5},{6}}
2、下面代码中,哪一项是正确定义了一个3*4的二维数组
A、int[][] arr = new int[3][4]
B、int[][] arr = new int[3][]
C、int[][] arr = new int[][4]
D、int[][] arr = {{1,2},{3,4,5},{6}}
3、以下哪个选项可以正确创建一个长度为3的二维数组( )
A、new int [2][3];
B、new int[3][];
C、new int[][3];
D、以上答案都不对