JavaSE
卸载JDK
- 找到电脑里面的jdk包(在环境配置那有路径)
- 删除环境配置与java相关的
- java -version查看版本
java基础
变量作用域
main主方法,一个类只能有一个主方法
public class Variable{
static int allClicks=0;//类变量 关键字static静态
String str='hello word';//实例变量 没有关键字
public void method(){
int i=0;//局部变量 在方法里面的
}
}
位运算符
and: & 与
or:| 或
a&b:都为1输出1,否则输出0
a|b:都为0输出0,否则输出1
a^b:相同输出0,否则输出1
位运算符:<<:左移 左移一位*2 效率高
.>>右移:右移一位/2
java流程控制
Scanner对象
可以通过Scanner类来获取用户的输入
基本语法:Scanner s=new Scanner(System.in)
通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前,我们一般用hasNext()与hasNextLine()判断是否还有输入的数据
public class demo {
public static void main(String[] args) {
//从键盘接收数据
Scanner scanner=new Scanner(System.in);
System.out.println("请输入数据:");
String str=scanner.nextLine();
System.out.println("你输入的数据是:");
System.out.println(str);
scanner.close();
}
}
if结构
单选结构
if(){
}
双选结构
if(){
}else{
}
多选结构
if(){
}else if{
}else{
}
switch多选择结构
语法结构 break不加就会输出满足条件后面的所有东西
switch(expression){
case value:
//语句
break://可选
case value:
//语句
default://可选
}
public class demo {
public static void main(String[] args) {
char grade='C';
switch (grade){
case 'A':
System.out.println("优秀");
case 'B':
System.out.println("良好");
case 'C':
System.out.println("及格");
break;
default:
System.out.println("未知");
}
}
}
while循环
对于while语句而言,如果不满足条件,则不能进入训话
while(布尔表达式){
//循环内容
}
int i=0;
int sum=0;
while(i<=100){
sum=sum+i
i++;
}
System.out.print(sum)
do...while循环至少循环一次
do{
//代码语句
}while(布尔表达式)
For循环
for(初始化;布尔表达式;更新){
//代码语句
}
九九乘法表:
public class demo {
public static void main(String[] args) {
for (int j = 1; j < 9; j++) {
for (int i = 1; i <= j; i++) {
System.out.print(j+"*"+i+"="+(j*i)+"\t");
}
System.out.println();
}
}
}
break跟continue
break:在任何循环语句中的主体部分,均可用break控制循环的流程。break用于强行退出循环
不执行孙欢中剩余的语句。(break语句也可以在switch中使用)
continue:语句用在循环语句主体中,用于终止某次循环过程,既跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定
java方法
方法包含一个方法头和一个方法体。
- 修饰符:可选的,告诉编译器如何调用该方法。定义了该方法的访问类型
- 返回值类型:方法可能会返回值。returnValueType是方法返回值的数据类型。有些方法执行所需要的操作,但没有返回值。在这种情况下,returnValueType是关键字void
- 方法名:是方法的实际名称,方法名和参数表共同构成方法签名
- 参数类型:参数像是一个占位符。当方法被调用时,传递给参数。
- 方法体:方法体包含具体的语句,定义该方法的功能
修饰符 返回值类型 方法名(参数类型 参数名){
...
方法体
...
return 返回值
}
方法调用
调用方法:对象名.方法名(实参列表)
java支持两种调用方法的方式,根据是否返回值来选择。
1.当返回一个值的时候,方法调用通常被当做一个值。例如
? int larger=max(30,40)
2.如果方法返回值是void,方法调用一定是一条语句
System.out.println("Hello")
方法的重载
方法的重载的规则:
- 方法名称必须相同
- 参数列表必须不同(个数不同,类型不同,参数排列顺序不同等)
- 方法的返回值类型可以相同也可以不相同。
- 仅仅返回类型不同不足以成为方法的重载。
可变参数
- 方法声明中,在指定参数类型后加一个省略号(...)
- 一个方法中只能指定一个可变参数,它必须是方法最后一个参数。任何普通参数都要在他之前声明
public class demo {
public static void main(String[] args) {
demo demo=new demo();
demo.test(1,2,3,4);
}
public void test(int... i){//这里的参数i必须是最后一个
System.out.println(i[0]);
}
}
递归
递归是A方法调用A方法!,自己调用自己
递归作用:利用递归可以简单的程序来解决一些复杂的问题。它通常把一个大型复杂的问题层层传递转化为一个与原问题相似的规模较小的问题来求解,递归策略只需要少量的程序就可描述出解题过程所需要多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。
递归结构包括两个部分:
- 递归头:什么时候不调用自身方法。如果没有头,将陷入死循环
- 递归体:什么时候需要调用自身方法.
//计算阶乘
public static void main(String[] args) {
System.out.println(test(10));
}
public static int test(int i){
if(i==1){
return 1;
}else {
return i*test(i-1);//此处不断调用自己
}
}
数组
数组声明创建
-
首先必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的语法:
dataType[] arrayRefVar;//首选的方法 或 dataType[] arrayRefVar[]//效果相同,但是不熟首选的方法
-
java语言使用new操作符来创建数组,语法如下:
dataType[] arrayRefVar=new dataType[arraySize];
获取数组长度:arrays.length
内存分析
冒泡排序
- 冒泡排序无疑是最为出名的排序算法之一,总共有八大排序!
- 冒泡的代码还是相当简单的,两层循环,外层冒泡轮数,里层依次比较,江湖人人尽皆知
- 我们看到嵌套循环,应该立马就可以得出这个算法的时间复杂度为0(n2)
public static void main(String[] args) {
int[] a ={5,8,3,4,5,21,52};
int[] sort=sort(a);
System.out.println(Arrays.toString(sort));
}
public static int[] sort(int[] array){
int temp=0;
//外层循环
for (int i=0;iarray[j]) {
temp = array[j];
array[i] = array[j + 1];
array[j + 1] = temp;
}
}
}
return array;
}
实现后面比前面大就换位置