一、变量与常量
标识符
- 标识符可以由字母、数字、下划线(_)和美元符($)组成,不能以数字开头
- 标识符严格区分大小写
- 标识符不能是Java关键字和保留字
- 标识符的命名最好能反应出其作用
关键字
1、变量
- 变量的三个元素:变量类型、变量名和变量值
变量名的命名规则:
- 1、满足标识符命名规则;
- 2、符合驼峰发命名规范;
- 3、尽量简单,做到见名知意;
- 4、变量名的长度没有限制
类的命名规则:
- 满足Pascal命名规范
变量声明
格式:
数据类型 变量名;
Eg:
int n; 声明整型变量n
long count; 声明长整型变量count
- 局部变量只在定义它的大括号内有效!
赋值
- 使用"="运算符进行赋值
- "="叫做赋值运算符,将运算符右边的赋值给左边的变量。
Eg:
int n ;//定义int型变量n
n =3; 将3赋值给n
- 可以在定义变量的同时给变量赋值,即变量的初始化。
int n = 3;
- 变量定义
int octal = 037; //定义int类型变量存放八进制数据
long longNumber = 0xa2cdf3ffL;//定义变量存放十六进制长整型数据
short shortNumber = 123; //定义变量存放短整型数据
byte b = 10; //定义变量存放byte类型数据
2、常量
常量命名一般用大写
- 两个单词,用下划线连接
final int N = 5;
final double MIN_VALUE = 0;
3、数据类型
3.1 基本数据类型
Java基本数据类型的范围
备注:
1、1.4E-45表示1.4X10-45,读作1.4乘以10的负45次方
2、boolean包括true和false两个值
3、char类型占2个字节,即16位
3.1.1 整型字面值
- Java中有三种表示整数的方法:十进制、八进制、十六进制
八进制:以0开头,包括0-7的数字。Eg:037,056
十六进制:以0x或者0X表示,包括0-9的数字,及字母a-f,A-F。 Eg:0x12,0xabcf,0XABCFF
3.1.2 浮点型字面值
- 浮点型字面值默认情况下表示double类型,也可以在值后加d或D
- Eg:123.43d 或 123.43D
- 表示float类型,则需要在字面值后加f或F
- Eg:23.4f 或 23.4F
float f = 1234.328f; //定义一个单精度浮点型变量,存放1234.328
double d = 5623.464; //定义一个双精度浮点型变量,存放5623.465
3.1.3 字符型字面值
- 字符型字面值用单引号内的单个字符表示。
- Eg:‘a’ , ‘b’ , ‘$’
char a = 'a';
char ch = 65;
ASCII码
- ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)
- 基于拉丁字母的一套电脑编码系统
- 主要用于显示现代英语和其他西欧语言
- 表示:使用7位或8位二进制数组合来表示128或256种可能的字符。
- 7位二进制数组合——标准ASCII码
- 8位二进制数组合(后128位)——扩展ASCII码
Unicode编码
- Unicde编码又称为统一码、万国码
- 目标是支持世界上所有的字符集
char c = '\u005d'; //Unicode表示法,在值前加前缀\u
3.1.4 布尔类型字面值
- 布尔值只能定义为true和false
boolean b = true;
3.1.5 字符串字面值
字符串不属于基本数据类型,它是类!
- 双引号引起来的0个或多个字符。
String str = "Hello World!" //空格也算一个字符
3.2 基本数据类型变量的存储
- 数据类型分为基本数据类型和引用数据类型
- 引用数据类型包括数组和类等
- 类定义的变量又叫对象
- 按照作用范围分为:类级、对象实例级、方法级、块级
4、Java中常见的转义字符
转义字符是一些有特殊意义的字符,用来表示常见的不能显示的字符,如\n表示换行。
5、类型转换
- 类型转换分为自动类型转换个强制类型转换。
- 自动类型转换 =>又叫隐式类型转换
- 强制类型转换:如果A类型的数据表示范围比B类型大,则将A类型的值赋值给B类型,需要强制类型转换
double d = 123.4;
float f = (float)d;
//char类型和int类型之间的转换
char c = (char)65536;
int n;
n = c;//隐式类型转换
c = (char)n;
//整型和浮点型的类型转换
int x = 100;
long y = x;
x = (int)y;
float f = 1000000000000000L;
float f1 = 103948583923948L; //长整型long转换为float会发生精度丢失
二、运算符
表达式:由运算符和操作数组成
sum = num1 + num2 //num1,num2为操作数;+ 为运算符;= 为赋值运算;
1、算数运算符
主要用于进行基本的算数运算,如加法、减法、乘法和除法等。
int num1=10,num2=5;
int result;//存放结果
result = num1 + num2;//加法
System.out.println(13/5) => 2//分子分母都是整型时,结果为整除后的结果
2、赋值运算符
格式:
变量 = 表达式;
赋值运算符是从右往左运算!
赋值运算符的左边不能是常量
3、关系运算符
· 比较运算符用于判断两个数据的大小
· 主要用于条件和循环语句中的判断条件
float f=5.0f; long l =5;f==l;
//结果为true,浮点数与整数进行比较,只要值相等就返回true
4、逻辑运算符
· 用来连接一个或者多个条件,判断这些条件是否成立
· 逻辑运算符的结果是布尔类型
//&运算符
int n = 3;
boolean b = (3>7)&((n++)<2) //问:b=?,n=?
b=false,n=4
//&&运算符
int n = 3;
boolean b = (3>7)&&((n++)<2) //问:b=?,n=?
b=false,n=3
· &&运算符又叫短路运算符,如果第一个表达式的值就能决定表达式最后的结果,运算符右边的表达式就不再计算了。
// ||运算符
int n = 3;
boolean b = (3<7)||((n++)<2) //问:b=?,n=?
b=true,n=3
· ||运算符又叫短路运算符,如果第一个表达式的值就能决定表达式最后的结果,运算符右边的表达式就不再计算了。
5、条件运算符
· Java中的条件运算符是三目运算符
· 语法:
布尔表达式?表达式1:表达式2
· 当布尔表达式的值为true,则返回表达式1的值,否则返回表达式2的值
int a=10,b=7;
int max;//声明变量max,存放最大值
max = a>b?a:b;
boolean g = a>b?(3<6|3<1):(true==false);
6、位运算符
7、运算符的优先级
三、流程控制
三大流程控制语句:顺序、选择、循环
1、选择结构
1.1 if结构,if-else结构
即根据不同的条件去执行不同的操作
**简单if语句的格式:
if(条件){
语句;
};
**if-else语句形式:
if(true){
语句;
}else{
语句;
};
键盘接收数据:
**键盘接收数据:
Scanner s = new Scanner(System.in);
int n=s.nextInt();
多种数据类型接收方法:
1.2 多重if
if(表达式1)
语句1;
else if(表达式2)
语句2;
else if(表达式3)
语句3;
···
else
语句n;
1.3 嵌套if
if(表达式1){
if(表达式2){
if(表达式3){
语句;
}}}else{
语句;}
1.4 if和switch的区别
· if结构:判断条件是布尔类型;判断条件是一个范围
· switch结构:判断条件是常量值
1.5 switch结构
switch(表达式){
case 常量表达式1:
语句1;break;
case 常量表达式2:
语句2;break;
default:
语句3;
}
/*注意事项:
**如果不写break,则会继续执行下边的case里的内容,造成“穿透”。
*/
2、循环结构
2.1 while循环
while(循环条件)
{
语句;
}
//如果循环体只有一条语句,大括号可以省略
//为避免死循环,小括号后面不要加分号
执行流程:
2.2 do-while
do
{
语句;
} while(循环条件);
/*注意事项:
* 1、do- while循环至少执行一次
* 2、循环条件后的分号不能丢
*/
2.3 for
for(表达式1;表达式2;表达式3)
{
语句;
}
//表达式1:循环变量定义并初始化 Eg:int i=1;
//表达式2:判断语句 Eg:i<=9;
//表达式3:循环条件改变的表达式 Eg:i++
2.4 三种循环结构的应用场景
1、for循环适用于循环次数固定的场景
2、while循环适用于不知道循环次数,只知道循环达到某个条件可以执行时使用
3、do-while适用于不知道循环具体执行次数,只知道满足某个条件继续执行或者结束执行,并且循环肯定执行一次时使用
2.5 循环嵌套
//多重循环
while(循环条件)
{
......
while(循环条件){
......
}
......
}
for(表达式1;表达式2;表达式3)
{
for(表达式1;表达式2;表达式3){
......
}
......
}
2.6 break语句
- break语句可以结束当前循环的执行
- 执行完break语句后,循环体中位于break语句后面的语句就不会被执行
- 在多重循环中,break语句只向外跳一层
2.7 continue语句
- continue语句只能用在循环里
- continue语句可以结束当前循环的执行,但是要继续下一次循环的执行
2.8 debug
·
四、数组
数组是相同类型的数据按顺序组成的一种引用数据类型
1、一维数组
- 数组声明:
语法格式:数据类型[] 数组名;
数据类型 数组名[];
int[] myIntArray;
int myIntArray[];
char[] ch;
String[] strArray;
-
数组创建
语法格式一:
先声明后创建数据类型[] 数组名;
数组名 = new 数据类型[数组长度]语法格式二:
数据类型[] 数组名 = new 数据类型[数组长度];
//创建一个长度为10的整型数组
//Eg1:
int[] arr;
arr = new int[10];
//Eg2:
int[] arr = new int[10];
//注意:数组长度必须指定
- 数组的初始化:声明数组的同时给数组赋值
int[] arr = {
1,2,3,4,5,6,7,8,9,10};
- 数组元素的引用
- 数组长度
属性length表示数组的长度,Eg: a.length
2、增强型for循环
- 又叫foreach循环
int[] arr = {
1,2,3,4,5};
for(int n:arr)
System.out.println(n);
- 增强型for循环与普通for循环的区别
1、增强型for循环书写简洁,遍历数组时不需要下标,主要用于数组或集合的遍历,数组或集合遍历完毕时循环会结束执行。
2、普通for循环需要三个条件,包括循环变量、循环结束条件和循环变量的变化。在进行数组遍历时,如果需要使用下标,可以使用普通for循环。比如:从键盘接收数组元素时,提示输入第几个元素。如果使用增强型for循环需要额外定义变量。
3、二维数组
//二维数组声明的三种形式
int[][] intArray; //声明int类型的二维数组
float foloatArray[][]; //声明float类型的二位数组
double[] doubleArray[]; //声明double类型的二位数组
//创建一个三行三列的int类型的数组
intArray = new int[3][3];
//声明数组的同时进行创建
char[][] ch = new char[3][5];
//创建float类型的数组时,只指定行数
floatArray = new float[3][];
//每行相当于一个一维数组,需要创建
floatArray[0] = new float[3];//第一行有3列
floatArray[1] = new float[4];//第二行有4列
floatArray[2] = new float[5];//第三行有5列
//二维数组的初始化
int[][] num = {
{
78,98},{
65,76,63},{
98}};
//循环输出二维数组的内容
for{
int i=0;i<num.length;i++){
for(int j=0;j<num[i].length;j++){
System.out.print(num[i][j]+" ");
}
}
五、方法
所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块。
- 方法声明:
语法格式:
访问修饰符 返回类型 方法名(参数列表){
方法体
}
public static void main (String[] args){
System.out.println("Hello Wold");
}
1、方法类型
1.1 无参无返回值方法
语法:
访问修饰符 void 方法名(){
方法体
}
package com.duan.test;
import javax.swing.text.Style;
import java.util.Scanner;
public class Demo {
//打印输出星号的方法
public void printStar(){
System.out.println("****************");
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
sc.next();
Demo myDemo = new Demo();
myDemo.printStar();
System.out.println("Hello World!");
myDemo.printStar();
}
}
1.2 无参带返回值方法
语法:
访问修饰符 返回值类型 返回值(){
return;
}
package com.duan.test;
public class Rectangle {
//求长方形面积的方法
public int area(){
int length =10;
int width = 5;
int getArea = length*width;
return getArea;//返回语句
}
public static void main(String[] args) {
Rectangle rectangle = new Rectangle();
System.out.println("长方形的面积为:"+rectangle.area());
}
}
1.3 有参无返回值方法
语法:
访问修饰符 void 方法名字(参数){
方法体
}
package com.duan.test;
public class MaxDemo {
//求最大值的方法
public void max(float a,float b){
float max;
if (a>b){
max = a;
}else {
max = b;
}
System.out.println("两个数"+a+"和"+b+"的最大值为:"+max);
}
public static void main(String[] args) {
MaxDemo maxDemo = new MaxDemo();
int a=5,b=3;
maxDemo.max(a,b);
float m=5.6f,n=8.9f;
maxDemo.max(m,n);
maxDemo.max(9.8f,12.8f);
}
}
1.4 带参有返回值方法
语法:
访问修饰符 返回值类型 方法名(参数){
return;
}
package com.duan.test;
public class FacDemo {
//方法不能嵌套定义
//求阶乘的方法
public int fac(int n){
int s = 1;
for (int i=1;i<= n;i++){
s*=i;//s=s*i
}
return s;
}
public static void main(String[] args) {
FacDemo facDemo = new FacDemo();
int fac = facDemo.fac(3);
System.out.println("3!="+fac);
int sum =0;
//求1!+2!+3!+4!+5!
for (int i=1;i<=5;i++){
fac = facDemo.fac(i);
sum = sum+fac;
}
System.out.println("1!+2!+3!+4!+5!="+sum);
}
}
1.5 关于参数和返回值的应用场景分析
1.参数
对于一个方法,可以没有参数,也可以有一个或者多个参数,这个是根据具体需求完成的。什么时候用无参的方法,比如我们课程介绍的输出一串星号,是一个简单的输出动作,内容时确定的,所以可以不用参数。在后面的学习过程中,会发现如果对成员变量的值进行输出,成员变量值已经在类中定义好了,此时方法中也可以不用定义参数了。
什么时候使用参数,比如需要求一个数的平方,而这个数可以是任意一个整数,那么就需要参数了。像求平方的操作,只需要对一个数求平方,所以一个参数及可以了。如果想求两个数的和,就需要两个参数了。
总结一下,如果方法的操作很固定,没有变化,就可以不使用参数,否则就要使用参数来应对变化了。
2.返回值
对于有无返回值使用可以这样判断,如果想让方法返回具体的值,进行之后的使用,就需要设置与返回值相同类型的返回类型。如果值不需要之后的使用,就可以不编写返回值。
1.7 数组作为方法参数
package com.duan.test;
public class ArrayMetod {
//打印输出数组元素值
public void printArray(int[] arr){
for (int i=0;i<arr.length;i++){
System.out.println(arr[i]+" ");
}
System.out.println();
}
public static void main(String[] args) {
int[] arr = {
1,2,3,4,5};
ArrayMetod am = new ArrayMetod();
am.printArray(arr);
}
}
package com.duan.test;
import java.util.Scanner;
public class ArraySearch {
//查找数组元素值的方法
public boolean search(int n,int[] arr){
boolean flag = false;//默认是没找到
for (int i=0;i<arr.length;i++){
if (arr[i]==n){
flag = true;//找到了
break;
}
}
return flag;
}
public static void main(String[] args) {
int[]arr1={
10,20,30,40,50,60};
Scanner sc=new Scanner(System.in);
System.out.println("请输入要查找的数据:");
int n1 = sc.nextInt();
ArraySearch as = new ArraySearch();
boolean