目录
Java基本语法
标识符
1.java中标识符由26个英文字符大小写,数字0-9,符号_ $。注意:数字不能开头。
2.java中是严格区分大小写。
3.在实际写程序的过程中定义标识符遵守“见名之意”。
数据类型
Java语言提供了八种基本类型。其中,六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。
byte、short、long、int、float、double、char、boolean。
整型
类型名字 | 表现形式 | 大小 | 范围 |
---|---|---|---|
字节 | byte | 1byte = 8bit | [-128,127] |
短整型 | short | 2byte = 16bit | [-32768,32767] |
整型 | int | 4byte = 32bit | [-2147483648~2147483647] |
长整型 | long | 8byte = 64bit | [-9223372036854774808~9223372036854774807] |
浮点型
类型名字 | 表现形式 | 大小 | 范围 |
---|---|---|---|
单精度 | float | 4byte = 32bit | -2^128 ~ +2^128 |
双精度 | double | 8byte = 64bit | -2^1024 ~ +2^1024 |
字符型
类型名字 | 表现形式 | 大小 | 范围 |
---|---|---|---|
字符型 | char | 2byte = 16bit | Unicode 0 ~ Unicode 65535 |
布尔型
类型名字 | 表现形式 | 大小 | 范围 |
---|---|---|---|
布尔类型 | boolean | 1byte = 8bit | true 或 false |
常量
在java程序执行过程中,其值不会发生改变的量就是常量。
自定义常量
被final修饰的变量为常量
注意: 符合标识符的命名规范,驼峰命名原则 常量全部大写,多个单词之间_连接。
变量
可变的量,在程序执行过程中,其值可以发生改变的量。
语法:
数据类型 变量名 = 变量值; --声明的同时赋值
数据类型 变量名; --先声明一个变量
变量名 = 赋值; --后赋值
变量的分类
1.局部变量 : 定义在{}中的变量,方法,语句块…
必须要先声明后赋值才能使用
2.成员变量 : 类中方法外
只声明不赋值存在默认值: 整数->0 小数 ->0.0 字符->’ ’ 布尔->false 字符串->null
Java中常用转义字符
\n | 换行 |
---|---|
\r | 回车 |
\f | 换页 |
\b | 退格 |
\0 | 空字符 |
\s | 字符串 |
\t | 制表符 |
\" | 双引号 |
\’ | 单引号 |
\\ | 反斜杠 |
自动类型转换
byte,short,char—> int —> long—> float —> double
自动类型转换规律
1、小的类型自动转化为大的类型
2、整数类型可以自动转化为浮点类型,可能会产生舍入误差
3、字符可以自动提升为整数
4、其中boolean类型不参与转换
//整型转浮点
int i = 360;
double b = i;//360.0
强制类型转换
小范围类型变量 变量名 = (小范围类型变量)大范围类型的数据;
1、先把数据强转为对应类型
2、对应类型的数据赋值给对应类型的变量
//强转(大转小)
int i = 3;
short s = (short)i;
System.out.println(s);
//取整
double d=4.9;
int i = (int)d;
System.out.println(i);//i = 4
Java中的六种运算符
算术运算符
赋值运算符
关系运算符
逻辑运算符
位运算符
三元运算符
算数运算符
一元|单目运算符 : 操作数只有一个运算符 +(加) 、-(减) 、++(自增)、- -(自减)
二元|双目运算符 : 操作数有两个 +(加)、-(减)、*(乘)、/(除)、%(取余)
三元|三目运算符 : 条件运算符
单目运算符中, “+”运算符不但用于计算两个数值型数据的和,还可用于字符串对象的连接。当+运算符的两个操作数一个是字符串而另一个是其他数据类型,系统会自动将另一个操作数转换成字符串,然后再进行连接,列如,System.out.println("a + b = " + (a + b) );
++或- -:自加(减)运算符
运算符既可以放入操作数的左边,也可以放入操作数的右边,但是表达的效果完全不一样。如:i++或++i;i- -或- -i。
如果把++(- -)放到左边,表示先把操作数加一(减一),然后才把操作数放入表达式中运算。如果把++(- -)放到右边,表示先把操作数操作数放入表达式中运算,然后才把操作数加(减)一。
赋值运算符
=:将右边的值赋给左边,例:int a = 1;
+=:左右两边的和相加赋给左边,例:int a = 1; a+=2;结果a的值为3
-=:左边减去右边的差赋给左边,例:int a =5;a-=2;结果a的值为3
=:两边数值相乘的值赋给左边,例:int a = 2;a=2;结果a的值为4
/=:左边除以右边的值赋给左边,例:int a = 6;a/=2;结果a的值为3
%=:左边除以右边的余数赋给左边,例:int a =7;a%=2;结果a的值为1
关系运算符
1、>:大于
int a = 1;
int b =2;
System.out.print(a > b);//其结果为false
2、<:小于
int a = 1;
int b =2;
System.out.print(a < b);//其结果为true
3、>=:大于等于
int a = 1;
int b =2;
System.out.print(a >= b);//其结果为false
4、<=:小于等于
int a = 1;
int b =2;
System.out.print(a <= b);//其结果为true
5、==:等于
int a = 1;
int b =2;
System.out.print(a == b);//其结果为false
6、!=:不等于
int a = 1;
int b =2;
System.out.print(a != b);//其结果为true
其结果都是boolean类型,即要么是true要么是false
逻辑运算符
&&:与、并且(短路), 两个条件同时为真时,结果为真
||:或、或者(短路), 两个条件有一个为真时,结果即为真
!:非,(!+条件) 条件为真时,结果为假
流程控制语句
if语句
如果条件判断的表达式返回值是true则可以执行if内部的语句,否则如果是false就不可以执行。
语法:if(条件判断表达式){
执行语句
}
范例:如果java考试成绩大于等于60及格
class Demo1{
public static void main(String[] args){
int score = 70;
if(score >= 60){
System.out.println(“及格”);
}
System.out.println(“程序结束”);
}
}
if…else
语法:if(条件判断表达式){
执行语句
}else{
执行语句
}
范例:如果java考试成绩大于60及格,否则是不及格
class Demo1{
public static void main(String[] args){
int score = 10;
if(score >= 60){
System.out.println(“及格”);
}else{
System.out.println(“不及格”);
}
System.out.println(“程序结束”);
}
}
if…else if…else
语法:if(条件判断表达式){
执行语句
}else if(条件表达式1){
执行语句
}else if(条件表达式2){
……
}else{
}
范例:如果大于等于60小于等于85及格,大于等于85小于100优秀,如果等于100完美,其余的不及格。
class Demo1{
public static void main(String[] args){
int score = 100;
if(score >= 60 && score < 85){
System.out.println(“及格了”);
}else if(score >= 85 && score < 100){
System.out.println(“优秀”);
}else if(score == 100){
System.out.println(“完美”);
}else{
System.out.println(“不及格”);
}
System.out.println(“程序结束”);
}
}
范例: 如果工资大于3000为D级,大于5000为C级,大于7000为B级,大于10000为A级
//通过简单if组合的形式
class Demo2{
public static void main(String[] args){
int salary = 7000;
if(salary >= 3000 && salary < 5000){
System.out.println(“D级”);
}
if(salary >= 5000 && salary < 7000){
System.out.println(“C级”);
}
if(salary >= 7000 && salary < 10000){
System.out.println(“B级”);
}
if(salary >= 10000){
System.out.println(“A级”);
}
}
}
//通过多重if实现
class Demo3{
public static void main(String[] args){
int salary = 3000;
//多重if当遇到第一个满足的表达式条件时执行当前的if语句,就不会再向下去执行
if(salary >= 10000){
System.out.println(“A级”);
}else if(salary >= 7000){
System.out.println(“B级”);
}else if(salary >= 5000){
System.out.println(“C级”);
}else if(salary >= 3000){
System.out.println(“D级”);
}
}
}
swtich语句
Switch:由上到下用switch中的表达式和值进行比较,如果匹配成功就执行case后的语句,在执行break的时跳出switch,如果一个也没有匹配上就执行default默认情况。
Switch(表达式){
case 常量1:
执行语句1;
break;
case 常量2:
执行语句2;
break;
……
default:
执行语句 ;
break;
}
范例:打印星期几
class Demo4{
public static void main(String[] args){
int week = 0;
switch(week){
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
case 4:
System.out.println("星期四");
break;
case 5:
System.out.println("星期五");
break;
case 6:
System.out.println("星期六");
break;
case 7:
System.out.println("星期日");
break;
default:
System.out.println("输入错误");
break;
}
}
}
Break可以省略不会报错,如果省略就会穿透执行语句(不管是否能匹配上),知道遇到一个break才会跳出,所以我们不建议省略break。
范例:计算指定年的月中有多少天
class Demo5{
public static void main(String[] args){
//计算每一年的每一月有几天
int year = 2000;
int month = 2;
int day = 0;
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
day = 31;
break;
case 4:
case 6:
case 9:
case 11:
day = 30;
break;
case 2:
if ((year % 400) == 0 || (year % 4 == 0 && year % 100 != 0)) {
day = 29;
} else {
day = 28;
}
break;
default:
break;
}
System.out.println(year + "年" + month + "月有" + day + "天");
}
}
注意:
Switch和多重if的区别:
If可以做等值判断也可以做区间判断。
Switch只能做等值判断,不能做区间判断
循环结构
while
循环:就是重复发生的过程(循环一般有重复的前提条件)。
语法:while(表达式){
循环体
}
表达式结果如果是true那么就执行循环体,如果是false就结束循环
范例:打印1到100之间的数字
class Demo7{
public static void main(String[] args){
//循环变量,计数器
int i = 1;
while(i <= 100){
System.out.println(i);
//更改循环条件
i++;
}
}
}
范例:打印1到100之间的所有的偶数和
class Demo8{
public static void main(String[] args){
//定义计数器
int i = 0;
//定义偶数和的结果变量
int sum = 0;
while(i <= 100){
//判断i是否是偶数
if(i%2 == 0){
//累加偶数
sum += i;
}
//更新计数器
i++;
}
System.out.println(sum);
}
}
do…while
语法:do{
循环体
}while(表达式)
注意:do…while和while,前者是先执行循环体,后者是先判断在执行循环体。
for
语法:for(表达式1; 表达式2; 表达式3){
循环体
}
表达式 | 形式 | 功能 | 举例 |
---|---|---|---|
表达式1 | 赋值语句 | 循环结构的初始化功能,为循环变量赋初值 | int i = 1 |
表达式2 | 条件语句 | 循环结构的循环条件 | i < 10 |
表达式3 | 迭代语句,通常使用++或–运算符 | 循环结构的迭代部分,通常用来修改循环变量的值 | i++ |
范例:打印1到100之间的所有的偶数和
class Demo11{
public static void main(String[] args){
/*
需求:打印1到100之间的所有的偶数和
分析:
循环条件:判断计数器是否小于等于100
循环操作:累加偶数和,更新计数器
*/
//定义偶数和的结果变量
int sum = 0;
for(int i = 0; i <= 100; i++){
if(i%2 == 0){
sum += i;
}
}
System.out.println(sum);
}
}
范例:打印乘法口诀
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
……
class Demo13{
public static void main(String[] args){
/*
范例2:打印乘法口诀
11=1
12=2 22=4
13=3 23=6 33=9
……
*/
for(int i = 1; i <=9; i++){
for(int j = 1; j <= i; j++){
System.out.print(j+"x"+i+"="+j*i+"\t");
}
System.out.println();
}
}
}
总结:
1、最重要的循环是while和for
2、 如果循环开始之前就能确定循环次数我们建议使用for
3、 如果循环次数不定建议使用while
break
break用来跳出循环和switch,出现在循环语句中,作用是跳出循环语句,执行后面的代码;若出现在嵌套循环中的内层循环时,只能跳出内层循环,如果想跳出外层循环需要对外层循环添加标记。
范例:运动会上跑5000米,跑到第三圈时,抽筋了退赛
class Demo14{
public static void main(String[] args){
//需求:运动会上跑5000米,跑到第三圈时,抽筋了退赛
for(int i = 1; i <= 10; i++){
if(i == 3){
System.out.println(“抽筋了退出”);
//跳出循环
break;
}
System.out.println(“我跑到第”+i+“圈”);
}
}
}
跳出外层循环,需对外层循环添加标记,aaa:
public class Demo14 {
public static void main(String[] args) {
int i, j; // 定义两个循环变量
aaa: for (i = 1; i <= 9; i++) { // 外层循环 标记aaa
for (j = 1; j <= i; j++) { // 内层循环
if (i > 4) { // 判断i的值是否大于4
break aaa; // 跳出外层循环
}
System.out.print("*"); // 打印*
}
System.out.print("\n"); // 换行
}
}
}
continue
也是来控制循环,作用是终止本次循环,执行下次循环。
范例:一周上五天班,然后我周三请假一天
class Demo15{
public static void main(String[] args){
//需求:一周上五天班,然后我周三请假一天
for(int i = 1; i <= 5; i++){
if(i == 3){
System.out.println("周三肚子疼请假");
//跳出本次循环,接着下一次循环
continue;
}
System.out.println("今天星期"+i+"上班");
}
}
}
函数(方法)
方法是一段能完成独立功能的代码块。我们只需要写一次方法,可以被多次调用,提高了代码的复用性。
有返回值的方法
语法:
修饰符 返回值类型 方法名称(参数类型 参数名称){
方法体
return 返回值;
}
对于定义格式的解释:
修饰符:现阶段固定为public static两个关键字。
返回值类型:方法最终产生的结果数据是什么类型。
方法名称:自定义的名称,命名规则和变量一样。
参数类型:进入方法的数据是什么类型。
参数名称:进入方法的数据对应的变量名称。
方法体:方法内部执行的若干行代码。
return:结束方法的执行,并且将返回值返还给调用处。
返回值:方法最终产生的结果数据。
注意:
返回值必须和返回值类型对应。
参数如果有多个,需要使用逗号分隔。
参数如果没有,小括号则可以留空。
多个方法的定义先后顺序无所谓。
不能在一个方法内部定义方法。
方法定义之后,没有调用就不会执行;要想执行,一定要调用它。
常见的有三种:
单独调用。这种方式无法使用方法的返回值。格式:方法名称(参数值);
打印调用。这种方式可以将方法的返回值直接打印。格式:System.out.println(方法名称(参数值));
赋值调用。这种方式可以将方法的返回值赋值给一个变量,注意变量的数据类型必须和方法的返回值类型对应。格式:数据类型变量名称= 方法名称(参数值)
无返回值的方法
语法:
修饰符 void 方法名称(参数类型参数名称){
方法体
return;
}
修饰符:与普通方法一样
返回值类型:固定为void
方法名称:与普通方法一样
参数类型:与普通方法一样
参数名称:与普通方法一样
方法体:与普通方法一样
return:后面不能写返回值,直接分号结束。而且最后一行return通常情况下会省略不写。
范例:输入年份,判断是平年还是闰年(定义一个判断平年,闰年的方法)
public class demo02 {
public static void main(String[] args) {
//调用方法,对2020年进行判断
System.out.println(yea(2020));
}
//定义方法,判断平年,闰年
public static String yea(double a) {
if ((a % 400 == 0) || (a % 4 == 0) && (a % 100 != 0)) {
return "是闰年";
} else {
return "是平年";
}
}
}
方法重载
对于参数列表不一样的多个方法,如果设置不一样的方法名称会很麻烦,所以引入了方法重载(Overload)的技术。
方法重载:方法名称相同,但是参数列表不同,参数列表的不同包括:
1.参数的个数不同;
2.参数的类型不同;
3.参数的多类型顺序不同。
重载与下列因素无关:
1.方法的返回值;
2.参数的名称–如果新建的方法传入的参数以及顺序与已有的一样。
范例:计算不同图形的面积 长方形 正方形 圆形 梯形
public class demo02 {
public static void main(String[] args) {
//根据输入的类型,个数自动判断,梯形
System.out.println(num(3,4,5));
}
public static int num(int a, int b) {
return a * b; //长方形
}
public static int num(int a) {
return a * a; //正方形
}
public static double num(double a) {
return 3.14 * a * a;//圆形
}
public static int num(int a, int b, int c) {
return (a + b) * c / 2;//梯形
}
}
数组
内存中保存数据的集合。
数组的定义
语法:
定义1:
数据类型[] 数组名 = new 数据类型[整数];
整数:是数组的长度。
int[] arr = new int[5];
定义2:
语法:数据类型[] 数组变量名 = {值1, 值2,……}
Int [] array = {12, 34, 56,……};
定义3:
语法:数据类型[] 数组变量名 = new 数据类型[]{值1,值2,值3,……}
int[] arr = new int[]{3,5,1,7};