Java语言中的单继承特性,相对于C++中的多继承,具有“简单性”。
- 在控制台接收带空格的字符串,必须使用nextLine();普通字符串直接用next()即可。
- UTF-8中一个中文需要3个字节空间;
- Java中默认导入java.lang包下的所有类。
- 使用import关键字来导入其他包!
引用Scanner类或其他类的方式:
- 在语句中直接使用类的全限定名(这种方式代码冗余度高,不推荐使用)
(java.util.Scanner s=new java.util.Scanner(System.in)) - 导入所要使用的类(import java.util.Scanner)
- 引用所要导入类的所属包及其下所有类(import java.util.*)
接收数据:
固定语句:Scanner scan=new Scanner(System.in)
int n=scan.nextInt();接收整型数据
double d=scan.nextDouble();接收浮点型数据
String s=scan.next();接收字符串,如果字符间有空格,只会输出第一个空格之前的数据
String s=scan.nextLine(); 接收一行数据,允许字符之间有空格
流程控制语句
判断
if:如果
if、else if所判断的表达式返回值都为boolean;
- if条件判断
If(表达式){//表达式为true执行代码块,为false跳过if代码块,继续向下执行
code;
}
- if else 代码块
if(表达式){//表达式为true,执行code1;为false,执行code2;
code1;
}else{
code2;
}
- if else if… else 组合代码块
if(表达式1){
//表达式1为true,执行code1,结束;为false,判断表达式2,为true,执行code2,
// 为false,执行code3;
code1;
}else if(表达式2){
code2;
}else{
code3;
}
注意:
if else if else 语句块自上而下进行判断。
code1,code2,code3,只有一组代码块会执行
if判断语句可以嵌套使用
分支
switch 选择
csase 匹配
switch(表达式){
//表达式返回的类型可以为:byte,short,int,char,string
case 值1:code1;break;
case 值2:code2;break’
...
default :code;
}
根据表达式返回的值,和case后面的值从第一个向下开始逐一匹配,若匹配成功则执行case后面的code;若果没有匹配成功,则执行default后面的code;凡是遇到break语句,则跳出switch语句快。
循环:
即通过一个条件控制一段代码周而复始的执行。
循环的三要素:
- 初始化初值
- 循环条件
- 迭代操作
while循环:
while(表达式){
//当满足表达式的条件时,执行code,一旦不满足条件结束循环,不再执行code;
code;
}
例:
int i = 1;//初始化初值
while(i<=10){//循环条件
System.out.println("HelloWorld");
i++;//迭代操作
}
while循环主要应用于没有边界的场景中
例:求一个数是几位数。
int n = 123456;//初始化初值
int count = 0;//计数器 用来保存结果(几位数)
while(n!=0){//循环条件
n/=10;//n = n/10
count++;
}
System.out.println(count);
do while 循环
do{
code
}while(表达式);
do while循环先执行code,再进行表达式判断。
while和do while的区别:
while先判断条件,再执行循环体代码,有可能循环体代码一次也不会执行;
do while先执行循环体代码,再判断条件,循环体代码至少会执行一次!
for循环
for(初始化初值;循环条件;迭代操作){
code;
}
for循环一般用于有明确边界的场景。
例:求1~100 的和
int sum = 0;
for(int i=1;i<=100;i++){
sum+=i;//sum = sum+i;
}
System.out.println(sum);
for循环执行流程:
- 先初始化初值;
- 再执行条件判断,当满足条件时执行循环体中的内容,不满足条件时退出循环。
- 迭代操作,执行第二步。
两种死循环:
1、for(;;){
code;
}
2、for(true){
code;
}
System.out.println(“n”);//在死循环的代码后面不能有其他语句,否则编译也通不过,报错:无法访问的语句。
多层循环:
for(;;){
for(;;){
code;
}
}
不建议使用3层及以上的循环,否则代码的执行效率就会很低。
流程控制:
break:中断 只跳出本层循环。
continue:继续 结束本次循环,继续执行下次循环
return:返回 结束本函数。return后面不能再有语句,否则会编译出错。
函数:
修饰符 返回值类型 函数名(参数列表){
实现部分;
}
函数的优点:
- 可以减少代码的冗余,即调高了代码的重用性
- 增加了代码的灵活性
函数名:代码块的名字,命名时遵循驼峰命名法;
通过函数名可以调用函数。
函数分两个部分:
- 声明部分
修饰符+返回值类型+函数名+参数列表 - 实现部分。
{}中可以写符合规范的任意代码。
参数列表:
- 参数列表用来处理代码中需要变化的部分。
- 参数列表中可以不定义参数,也可以定义多个参数,多个参数之间用逗号隔开。
- 函数的参数列表中的参数叫做形式参数(简称形参),只关心参数类型,不关心参数具体的数值。
- 参数列表中如果规定了形参,那在调用函数时要传入与形参数据类型一致的实际参数(简称实参)。
返回值:
返回值是让我们得到函数的结果。
当函数声明了返回值,就必须return一个结果。
注意:在if判断以及分支中,要保证每个分支都有返回结果(return 语句)。
return用法:
1、用在没有返回值的函数中,表示退出当前函数,函数执行结束。
2、用在有返回值的函数中,调用该函数时,会给调用者返回一个结果。
重载:
作用:屏蔽使用者的差异,给使用方法的人带来方便。
语法:
- 方法名必须一致。
- 参数列表必须不同(参数数据类型不同、参数个数不同、参数数据类型的顺序不同)
- 对于返回值没有要求,可以有,也可以没有。
可变参数:
定义在参数列表中。
格式:数据类型 … 变量名
注意:
- 可变参数必须放在参数列表的最后一个
- 可变参数只能有一个
- … 前后的空格可以写也可以不写
- 访问可变参数可以通过下标访问,和数组类似
递归:
递归方法:一种自己调用自己的方法。
例:
1> 用递归来求阶乘
public static int jc(int n){//求阶乘
if(n==1){
return 1;
}
return n*jc(n-1);
}
2>递归求斐波那契第n项
public static int fibonacci(int m){//递归求斐波那契第n项
if(m==1||m==2){
return 1;
}
return fibonacci(m-1)+fibonacci(m-2);
}