------- android培训、java培训、期待与您交流! ----------
Java语法二
函数
1. 函数就是定义在类中的具有特定功能的一段独立小程序,函数也称为方法
2. 函数的格式
修饰符返回值类型函数名(参数类型形式参数1,参数类型形式参数2, …) {
执行语句;
return返回值;
}
a) 修饰符public static
b) 返回值类型这个特定的功能完成后,需要返回一个结果,这个地方就是返回结果的类型
c) 函数名调用时指定的名字,这个名字要符合标识符命名规则
d) 参数类型形式参数的数据类型
形式参数:表示将要接收的参数
实际参数:调用方法时传入指定的参数
e) 执行语句这个语句是由多条语句组成
f) return返回方法指定类型的一个值
3. 函数的特点
a) 函数只有被调用后,才执行
b) void 表示没有返回值,在这个函数的结尾可以不写return
jvm会自动的结尾处加上return;
4. 自定义函数
a) 要实现什么功能,返回什么样的值
b) 接收什么样的参数或者不接受参数
5. 函数的重载
a) 函数名相同,参数个数不同, 参数类型顺序不同
b) 特点:与返回值类型无关, 只看参数列表
c) 好处:便于阅读, 优化程序设计
代码示例
class MethodTest {
public static void main(String[] args) {
// 调用方法
getNum();
// 接收参数并返回int型的方法
int a = 1;
int b = 2;
int sum = sum(a, b);
System.out.println(a + "+" + b + "=" + sum);
}
// 定义一个方法输出1~10
public static void getNum() {
for (int i = 1; i <= 10; i++) {
System.out.println(i);
}
}
// 定义一个方法得到两个数的和
public static int sum(int a, int b) {
return a + b;
}
}
数组
1. 同一种类型数据的集合,其实数组就是一个容器
2. 数组的好处
可以自动给数组中的元素从0开始编号,方便操作这些元素
3. 数组的定义的几种格式
a) int[] arr = new int[5]; //初始化数组大小
b) int[] arr; //声明数组
arr = new int[]; //创建数组对象
c) int[] arr = new int[]{1, 2, 3,4}; //指定数组的内容
d) d) int[] arr = {1, 2, 3, 4}; //直接创建数组内容
4. 当操作同一类型数量比较多的数据时
5. 数组会被创建在内存中的堆内,堆内的数据都是有初始值的, 下面是每种数据类型的初始值
byte, short, int, long这些类型初始值是0
float, double初始值是0.0
char初始值是\0000 null
boolean初始值是false
引用类型初始值是null
6. 操作数组最常见的问题
a) 当你访问到数组中的最后一个元素时,还想继续访问, 这个时候,会发生下标越界异常ArrayIndexOutOfBoundsException
示例: int[] arr = new int[3];
System.out.println(arr[3]);
b) 当数组不在指向某个实体时,你还继续访问,就会发生空指针异常NullPointerException
示例: int[] arr = new int[3];
arr= null;
System.out.println(arr[1]);
7. 常见的数组的操作
a) 访问数组某个值可以用数组名[index]得到, index指的是数组中的下标,最小下标是0, 最大是arr.length-1,得到数组长度可以用length
b) 遍历数组
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
c) 获取最值
获取最大值
publicstatic int getMax(int[] arr){
intmax = arr[0];
//i从1开始,因为第一个数不用跟自己比
for(intx = 1; x < arr.length; x++) {
if(arr[x]> max) {
max= arr[x];
}
}
returnmax;
}
获取最小值
publicstatic int getMin(int[] arr) {
intmin = arr[0];
//i从1开始,因为第一个数不用跟自己比
for(intI = 1; I < arr.length; i++) {
if(arr[i]< min){
min= arr[i];
}
}
returnmin;
}
d) 排序
选择排序
原理: 如果拿0下标上的元素依次和后面的元素进行比较,
第一次内循环结束后,最小值出现在了0下标位置
public staticvoid selectSort(int[] arr){
//i<arr.length-1n个数两两比 , n-1次就能获得最值。
for(inti=0; i<arr.length-1; i++){
//0下标元素没必要和自己比,所以j从1开始。
//发现j为了不重复比较,总是要比i大1,所以j从i+1开始
for(intj=i+1; j<arr.length; j++){
if(arr[j]<arr[i]){
inttemp = arr[i];
arr[i]= arr[j];
arr[j]= temp;
}
}
}
}
冒泡排序
原理:两个相邻元素进行比较,第一次比较完以后,最大值出现在了最大下标处
publicstatic void bubbleSort(int[] arr){
//i<arr.length-1n个数两两比, n-1次就能获得最值
for(inti=0; i<arr.length-1; i++){
//为了防止下标越界, j<arr.length-1
//为了减少比较次数, j<arr.length-1-i
for(intj=0; j<arr.length-1-i; j++){
if(arr[j]>arr[j+1]){
inttemp = arr[j];
arr[j]= arr[j+1];
arr[j+1]= temp;
}
}
}
}
e) 传递参数
调用的时候, 传递是基本类型的值的时候,形参改变对实参没有任何影响
调用的时候,传递是引用类型的地址值的时候,形参改变对实参有直接影响
8. 数组的初始化过程
创建数组时在堆内存开辟一连串的空间,引用指向第一个空间, 这个空间代表这个数组的下标,每个空间指向数组存储的内容, 当访问数组某个位置的内容时通过指定下标得到
数组练习示例代码
冒泡排序, 二分查找
class BinarySearch {
public static void main(String[] args) {
// 创建一个数组
int[] arr = { 1, 4, 7, 3, 9 };
// 给数组排序
sort(arr);
// 打印数组
print(arr);
// 二分查找法查找3的索引
int index = binary(arr, 9);
System.out.println(index);
}
// 定义一个排序的方法
public static void sort(int[] arr) {
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
// 定义一个二分查找的方法
public static int binary(int[] arr, int num) {
// 定义数组的最小下标和, 大下标和中间的下标
int min = 0;
int max = arr.length - 1;
int mid = (min + max) / 2;
// 当最小下标小于等于最大下标是循环
while (min <= max) {
// 如果num比数组中间的值小, 那么将最大下标定义为mid-1
if (num < arr[mid]) {
max = mid - 1;
}
// 如果num比数组中间的值大, 那么将最大下标定义为mid+1
if (num > arr[mid]) {
min = mid + 1;
}
// 如果num与中间的值相等, 那么返回mid
if (num == arr[mid]) {
return mid;
}
mid = (min + max) / 2;
}
// 找不到返回-1
return -1;
}
// 定义打印数组内容的方法
public static void print(int[] arr) {
// 遍历数组打印每一个元素
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}