匿名对象的使用 匿名对象就是没有明确的给出名字的对象,是对象的一种简写形式。一般匿名对象只能调用一次 ,而且匿名对象只在堆内存中开辟空间,而不存在栈内存的引用 。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 package com.yuanbaoqiang.java;public class InstanceTest { public static void main (String[] args) { Phone p = new Phone(); System.out.println(p); p.playGame(); p.sendeMail(); new Phone().price = 1999 ; new Phone().getPrice(); PhoneMall mall = new PhoneMall(); mall.show(new Phone()); } } class PhoneMall { public void show (Phone phone) { phone.sendeMail(); phone.playGame(); } } class Phone { double price; public void sendeMail () { System.out.println("发送邮件" ); } public void playGame () { System.out.println("玩游戏" ); } public void getPrice () { System.out.println("手机的价格为:" + price); } }
自定数组的工具类 定义了一个数组工具类ArrayUtil
:
求最值,总和,平均数,数组反转,复制,排序,遍历,查找指定元素(线性查找)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 package com.yuanbaoqiang.java;public class ArrayUtil { public int getMax (int [] arr) { int max = arr[0 ]; for (int i = 1 ; i < arr.length; i++) { max = arr[i] > max ? arr[i] : max; } return max; } public int getMin (int [] arr) { int min = arr[0 ]; for (int i = 1 ; i < arr.length; i++) { min = arr[i] < min ? arr[i] : min; } return min; } public int getSum (int [] arr) { int sum= 0 ; for (int i = 0 ; i < arr.length; i++) { sum +=arr[i]; } return sum; } public double getAve (int [] arr) { return getSum(arr) / arr.length; } public void reverse (int [] arr) { for (int min=0 , max=arr.length-1 ; min < max; min++, max--){ int temp = arr[min]; arr[min] = arr[max]; arr[max] = temp; } } public int [] copy(int [] arr){ int [] arr1 = new int [arr.length]; for (int i = 0 ; i < arr1.length; i++) { arr1[i] = arr[i]; } return arr1; } public void sort (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[j+1 ]){ int temp = arr[j]; arr[j] = arr[j+1 ]; arr[j+1 ] = temp; } } } } public void print (int [] arr) { for (int i = 0 ; i < arr.length; i++) { System.out.print(arr[i]+" " ); } } public int getIndex (int [] arr, int dest) { for (int i = 0 ; i < arr.length; i++) { if (dest == arr[i]){ return i; } } return -1 ; } }
可变个数形参的方法
可变个数形参的格式: 数据类型 … 变量名
当调用可变个数形参的方法时,传入的参数个数可以是0个,1个,2个,或者多个
可变形参的方法与本类中方法名相同,形参不同的方法之间构成重载
可变个数形参的方法与本类中方法名相同,形参类型也相同的数组之间不构成重载。换句话说,二者不能共存
可变个数形参在方法的形参中,必须声明在末尾
可变个数形参在方法的形参中,最多只能声明一个可变形参
String … strs相比于String[] strs更简单,使用前不需要new一个数组,直接写入实参即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 package com.yuanbaoqiang.java1;public class MethodArgsTest { public static void main (String[] args) { MethodArgsTest test = new MethodArgsTest(); test.show("AA" , "CC" , "BB" , "DD" ); } public void show (int i) { } public void show (String s) { System.out.println("show(String s)" ); } public void show (String ... strs) { System.out.println("show(String ... strs)" ); for (int i = 0 ; i < strs.length; i++){ System.out.println(strs[i]); } } public void show (int i, String ... strs) { } }
值传递机制
形参:方法定义时,声明的小括号内的参数
实参:调用方法时,实际传递给形参的数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 public class ValueTransferTest1 { public static void main (String[] args) { int m = 10 ; int n = 20 ; System.out.println("m = " + m + ", n = " + n); ValueTransferTest1 test = new ValueTransferTest1(); test.swap(m, n); System.out.println("m = " + m + ", n = " + n); } public void swap (int m, int n) { int temp = m; m = n; n = temp; } }
递归方法 传送门:递归 。