泉州网站seo公司,百度公司注册地址,网站seo推广多少钱,做网站文字字号大小第一章 Static关键字
1.static的介绍以及基本使用
1.概述#xff1a;static是一个静态关键字
2.使用#xff1a; a.修饰一个成员变量#xff1a; static 数据类型 变量名 b.修饰一个方法#xff1a; 修饰符 static 返回值类型 方法名#xff08;形参#xff09;{…第一章 Static关键字
1.static的介绍以及基本使用
1.概述static是一个静态关键字
2.使用 a.修饰一个成员变量 static 数据类型 变量名 b.修饰一个方法 修饰符 static 返回值类型 方法名形参{ 方法体 return 结果 }
3.调用静态成员 类名直接调用不用new对象
4.静态成员特点 静态成员属于类成员不属于对象成员非静态成员属于对象成员 静态成员会随着类的加载而加载 静态成员优先于非静态成员存在在内存中 凡是根据静态成员所在的类创建出来的对象都可以共享这个静态成员
public class Student {String name;int age;static String ClassRoom;}
public class Test01 {public static void main(String[] args) {//先给静态成员赋个值Student.ClassRoom 后陡门58号;Student s1 new Student();s1.name 张钥沅;s1.age 26;
// s1.ClassRoom 后陡门58号;System.out.println(s1.name,s1.age,Student.ClassRoom);System.out.println();Student s2 new Student();s2.name 路卓豪;s2.age 29;
// s2.ClassRoom 后陡门58号;System.out.println(s2.name,s2.age,Student.ClassRoom);}
}
2.static修饰成员的访问特点
1.在静态方法中能直接访问非静态成员吗不能 想要调用的话需要先new对象调用
2.在非静态方法中能直接访问静态成员吗能 同类中可以直接调用也可以类名调用 不同类中类名调用 3.在静态方法中能直接访问静态成员吗能 同类中可以直接调用也可以类名调用 不同类中类名调用
4.在非静态方法中能直接访问非静态成员吗能 同类直接调用也可以new对象调用 不同类new对象调用 总结 1.不管在不在同一个类中非静态成员都可以new对象调用 2.不管在不在同一个类中静态成员都可以类名调用 问题1既然static成员那么好使类名直接调用那么我们在实际开发中能不能将所有的成员都定义成静态的不能 由于静态成员会随着类的加载而加载如果将所有的成员都定义成静态的那么类一加载静态成员都会进内存会大量占用内存空间所以说不能把所有的成员定义成静态成员 问题2静态成员都啥时候定义 一般情况下我们在抽取工具类的时候可以将工具类中所有的成员都定义成静态的 问题3啥时候定义工具类 我们在写代码的时候发现有的功能在反复实现代码一样功能一样此时就可以抽取出来形成工具类
public class ArraysUtils {/*构造方法用private修饰工具类中的成员都是静态的静态成员都是类名调用不需要new对象所以工具类中的构造方法都是private修饰如果构造方法被private修饰那么在别的类中就不能利用构造方法new对象* */private ArraysUtils(){}//定义一个方法实现获取int数组最大值public static int getMax(int[] arr){int max arr[0];for (int i1;iarr.length;i){if (maxarr[i]){max arr[i];}}return max;}
}
public class Test01 {public static void main(String[] args) {int[] arr {5,34,7,3,45,12};
// int max arr[0];
// for (int i1;iarr.length;i){
// if (maxarr[i]){
// max arr[i];
// }
// }
// System.out.println(max max);int max ArraysUtils.getMax(arr);System.out.println(max max);}
}
public class Test02 {public static void main(String[] args) {int[] arr {2,354,56,78,54,3,65,6};
// int max arr[0];
// for (int i1;iarr.length;i){
// if (maxarr[i]){
// max arr[i];
// }
// }
// System.out.println(max max);int max ArraysUtils.getMax(arr);System.out.println(max);}
}
第二章 可变参数
需求定义一个方法实现n个整数相加
分析 方法参数位置只明确参数类型但是不明确参数个数此时就可以定义成可变参数
1.可变参数的使用和注意事项
1.定义格式 数据类型...变量名
2.注意 可变参数的本质是一个数组 参数位置不能连续写多个可变参数而且当可变参数和其他普通参数一起使用时可变参数需要放到列表最后
public class Demo01Var {public static void main(String[] args) {sum(1,2,3,4,5);sum1(1,1,2,3,4,5);}public static void sum(int...arr){int sum 0;for (int i 0; i arr.length; i) {sumarr[i];}System.out.println(sum);}public static void sum1(int i,int...arr){}
}
2.可变参数的练习
需求1返回n个字符串拼接结果如果没有传入字符那么返回经字符串“”
public class Demo02Var {public static void main(String[] args) {/*返回n个字符串拼接结果如果没有传入字符那么返回经字符串“”*/String str concat(蒋敦豪,鹭卓,李耕耘,李昊,赵一博,卓沅,赵小童);System.out.println(str str);}public static String concat(String...s){String str ;for (int i 0;is.length;i){strs[i];}return str;}
}
需求2n个字符串进行拼接每一个字符串之间使用某字符进行分隔如果没有字符串那么返回空字符串“”
public class Demo03Var {public static void main(String[] args){/*n个字符串进行拼接每一个字符串之间使用某字符进行分隔如果没有字符串那么返回空字符串“”*/String str concat(-,蒋敦豪,鹭卓,李耕耘);System.out.println(str str);}public static String concat(String s1,String...s2){String str ;for (int i 0; i s2.length; i) {if (i!s2.length-1){
// str strs2[i]s1;strs2[i]s1;}else {strs2[i];}}return str;}
}
第三章 递归
1.概述方法内部自己调用自己
2.分类 a.直接递归 public static meyhod(){ method(); } b.间接递归 A(){ B(); } B(){ C(); } C(){ A(); } 3.注意 递归必须要有出口否则就会出现栈内存溢出 递归即使有出口递归次数也不要太多
public class Demo01Recursion {public static void main(String[] args) {method();}public static void method(){method();}
}
示例1利用递归输出3到1
法1
public class Demo02Recursion {public static void main(String[] args) {method(3);}public static void method(int i){System.out.print(i );if (i-10){method(i-1);}}
}
法2
public class Demo02Recursion {public static void main(String[] args) {method(3);}// public static void method(int i){
// System.out.print(i );
// if (i-10){
// method(i-1);
// }
// }public static void method(int i){if (i1){System.out.println(i);//结束方法return;}System.out.print(i );method(i-1);}
} 示例2求n!n的阶乘
需求定义一个方法完成3的阶乘 3*2*1
分析假如定义一个方法代表n的阶乘 -method(n) n接收几就代表几的阶乘
public class Demo03Recursion {public static void main(String[] args) {int method method(3);System.out.println(method);}public static int method(int i){if (i1){return 1;}return i*method(i-1);}
} 示例3求斐波那契数列
规律一个数等于前两个数之和比如 1,1,2,3,5,8,13,21,34,55......
public class Demo04Recursion {public static void main(String[] args) {int result method(12);System.out.println(result result);}public static int method(int month){if(month1||month2){return 1;} else {return method(month-1)method(month-2);}}
}
第四章 数组常见算法
1.数组翻转
1.概述数组对称索引位置上的元素互换
法1
public class Demo01Arrays {public static void main(String[] args) {int[] arr1 {1,2,3,4,5,6,7};int[] arr2 Reverse(arr1);for (int i0;iarr1.length;i){System.out.print(arr1[i] );}System.out.println();for (int i0;iarr2.length;i){System.out.print(arr2[i] );}}public static int[] Reverse(int[] arr){if (arr.length!0){int[] newarr new int[arr.length];int min 0;int max newarr.length-1;int mid (minmax)/2;for (int i0;imid;i){newarr[min] arr[max];newarr[max] arr[min];min;max--;}return newarr;}else {return arr;}}
}
法2
public class Demo02Arrays {public static void main(String[] args) {int[] arr {1,2,3,4,5,6,7};for (int min 0,maxarr.length-1; minmax ;min,max--){int temp arr[min];arr[min] arr[max];arr[max] temp;}for (int i 0; i arr.length; i) {System.out.print( arr[i] );}}
}
2.冒泡排序 数组的排序是将数组中的元素按照大小进行排序默认都是以升序形式进行排序数组排序的方法很多我们讲解的是数组的冒泡排序 排序都要进行数组元素的大小比较在进行位置的交换冒泡排序是采用数组中相邻元素进行比较换位
法1
public class Demo03Arrays {public static void main(String[] args) {int[] arr {2,35,6,8,97,3,57};BobbleSort(arr);for (int i 0; i arr.length; i) {System.out.print(arr[i] );}}public static int[] BobbleSort(int[] arr) {for (int i1;iarr.length;i){for (int max arr.length - 1; max 0; max--) {if (arr[max] arr[max - 1]) {int temp arr[max];arr[max] arr[max - 1];arr[max - 1] temp;}}}return arr;}
}
法2
public class Demo04Arrays {public static void main(String[] args) {int[] arr {2,35,6,8,97,3,57};BobbleSort(arr);for (int i 0; i arr.length; i) {System.out.print(arr[i] );}}public static int[] BobbleSort(int[] arr) {for (int i 0; i arr.length-1; i) {for (int j 0; j arr.length-1-i; j) {if (arr[j]arr[j1]){int temp arr[j];arr[j] arr[j1];arr[j1] temp;}}}return arr;}
}
控制台输入一组数进行冒泡排序并且打印输出
import java.util.Scanner;public class Demo05Arrays {public static void main(String[] args) {Scanner sc new Scanner(System.in);System.out.println(请输入想要排序的数字个数);int n sc.nextInt();int[] arr new int[n];System.out.println(请输入想要排序的n个数);for (int i 0; i n; i) {arr[i]sc.nextInt();}boolean swapped false;for (int j 0; j n-1; j) {for (int i 0; i n-1-j; i) {if (arr[i]arr[i1]){int temp arr[i];arr[i] arr[i1];arr[i1] temp;swapped true;}}if (!swapped){System.out.println(不需要排序);break;}}for (int i 0; i arr.length; i) {System.out.print(arr[i] );}}
}
3.二分查找
1.前提数组中的数据必须是有序的
2.查询思想 a.老式查询遍历数组一个一个比较查询效率慢 b.二分查找每次找中间索引对应的元素进行比较查询每次查询少一半数据
法1
import java.util.Scanner;public class Demo06Binary {public static void main(String[] args) {int[] arr {1,2,3,4,5,6,7};int min 0;int max arr.length-1;int mid (minmax)/2;System.out.println(请输入想要查找的数);Scanner sc new Scanner(System.in);int n sc.nextInt();while (minmax){if (arr[mid]n){System.out.println(查找成功,索引是mid);break;} else if (arr[mid]n) {min mid1;mid (minmax)/2;}else {max mid-1;mid (minmax)/2;}}if (minmax){System.out.println(查找失败);}}
}
法2
import java.util.Scanner;public class Demo07Binary {public static void main(String[] args) {int[] arr {1,2,3,4,5,6,7};System.out.println(请输入欲查询数字);Scanner sc new Scanner(System.in);int n sc.nextInt();int result Binary(n,arr);if (result!-1){System.out.println(查询成功索引是result);}else {System.out.println(查询失败);}}public static int Binary(int n,int[] arr){int min 0;int max arr.length-1;int mid 0;while (minmax){mid (minmax)/2;if (arr[mid]n){min mid1;} else if (arr[mid]n) {max mid-1;}else {return mid;}}return -1;}
}第五章 数组操作
1.对象数组
需求定义一个长度为3的数组存储3个Person对象遍历数组将3个Person对象中的属性值获取出来
public class Person {private String name;private int age;public Person(){}public Person(String name,int age) {this.name name;this.age age;}public void setName(String name){this.name name;}public String getName(){return name;}public void setAge(int age){this.age age;}public int getAge(){return age;}
}
public class Demo01ObjectArray {/*定义一个长度为3的数组存储3个Person对象遍历数组将3个Person对象中的属性值获取出来*/public static void main(String[] args) {Person[] arr new Person[3];Person p1 new Person(蒋敦豪,29);Person p2 new Person(鹭卓,29);Person p3 new Person(李耕耘,28);arr[0] p1;arr[1] p2;arr[2] p3;/*遍历当i等于0时arr[0]就是p1对象当i等于1时arr[1]就是p2对象当i等于2时arr[2]就是p3对象*/for (int i 0; i arr.length; i) {System.out.println(arr[i].getName() arr[i].getAge());}}}
练习1
1定义学生类Student 声明姓名和成绩成员变量
2测试类ObjectArrayTest的main中创建一个可以装3个学生对象的数组并且按照学生成绩排序显示学生信息
public class Student {private String name;private int score;public Student(){}public Student(String name,int score){this.name name;this.score score;}public void setName(String name){this.name name;}public void setScore(int score){this.score score;}public String getName(){return name;}public int getScore(){return score;}
}
public class ObjectArrayTest {public static void main(String[] args) {Student[] arr1 new Student[3];arr1[0] new Student(卓沅,100);arr1[1] new Student(赵小童,98);arr1[2] new Student(何浩楠,99);boolean swapped false;for (int i 0; i arr1.length-1; i) {for (int j 0; j arr1.length-1-i; j) {if (arr1[j].getScore()arr1[j1].getScore()){Student temp arr1[j];arr1[j] arr1[j1];arr1[j1] temp;swapped true;}}if (!swapped){break;}}for (int i 0; i arr1.length; i) {System.out.println(arr1[i].getName()...arr1[i].getScore());}}
}
第六章 方法参数
1.基本数据类型做方法参数传递
基本数据类型作为实参传递传递的是值不是变量本身
方法运行压栈保存
方法运行结束弹栈 -释放栈内存
public class Demo01Param {public static void main(String[] args) {int a 10;int b 20;/*基本数据类型当做实参传递传递的是值不是变量本身*/method(a, b);System.out.println(a);//10System.out.println(b);//20}public static void method(int a ,int b){a10;b20;System.out.println(a);//20System.out.println(b);//40}
}
2.引用数据类型做方法参数传递
引用数据类型作为方法参数传递时传递的是地址值而不是具体的数据
public class Demo02Param {public static void main(String[] args) {int[] arr {10,20};method(arr);System.out.println(arr[0]);//20System.out.println(arr[1]);//40}public static void method(int[] arr){arr[0]10;arr[1]20;System.out.println(arr[0]);//20System.out.println(arr[1]);//40}
}
第七章 命令行参数了解
通过命令行给main方法的形参传递的实参称为命令行参数
第八章 其他操作
1.快速生成方法
1.初学者要求先定义在调用不是初学者就可以先调用在定义方法 快捷键Alt回车
2.快速将一段代码抽取到一个方法中 选中要抽取的方法按 Ctrl Alt m
2.debug调试
1.概述调试代码的一种手段
2.作用能清楚的看到每个变量在代码执行过程中的变化还可以找错
3.使用在想要开始Debug的代码那一行最左边点击一下出现红色小圆点断点右键点击Debug