文章目录
第四章 面向对象(上)
全部源码:https://github.com/name365/JavaSE-30Day
4.4 类的成员之二:方法
类中方法的声明和使用
public class CustomerTest {
public static void main(String[] args) {
Customer cust1 = new Customer();
cust1.eat();
cust1.sleep(8);
}
}
class Customer{
String name;
int age;
boolean isMale;
public void eat(){
System.out.println("客户吃饭");
return;
}
public void sleep(int hour){
System.out.println("休息了" + hour + "个小时");
eat();
}
public String getName(){
if(age > 18){
return name;
}else{
return "Tom";
}
}
public String getNation(String nation){
String info = "我的国籍是:" + nation;
return info;
}
public void info(){
}
}
练习1
- 创建一个Person类,其定义如下:
public class Person {
String name;
int age;
int sex;
public void study(){
System.out.println("studying");
}
public void showAge(){
System.out.println("age:" + age);
}
public int addAge(int i){
age += i;
return age;
}
}
- 测试类
public class PersonTest {
public static void main(String[] args) {
Person p1 = new Person();
p1.name = "Tom";
p1.age = 18;
p1.sex = 1;
p1.study();
p1.showAge();
int newAge = p1.addAge(2);
System.out.println(p1.name + "的年龄为" + newAge);
System.out.println(p1.age);
Person p2 = new Person();
p2.showAge();
p2.addAge(10);
p2.showAge();
p1.showAge();
}
}
练习2
public class CircleTest {
public static void main(String[] args) {
Circle c1 = new Circle();
c1.radius = 2.1;
c1.findArea();
double area = c1.findArea(3.4);
System.out.println(area);
}
}
class Circle{
double radius;
public void findArea(){
double area = Math.PI * radius * radius;
System.out.println("面积为:" + area);
}
public double findArea(Double r){
double area = 3.14 * r * r;
return area;
}
}
练习3
public class ExerTest {
public static void main(String[] args) {
ExerTest esr = new ExerTest();
System.out.println("面积为:" + esr.method(6,5));
}
public int method(int m,int n){
for(int i = 0;i < m;i++){
for(int j = 0;j < n;j++){
System.out.print("* ");
}
System.out.println();
}
return m * n;
}
}
练习四
public class StudentTest {
public static void main(String[] args) {
Student[] stu = new Student[20];
for(int i = 0;i <stu.length;i++){
stu[i] = new Student();
stu[i].number = i + 1;
stu[i].state = (int)(Math.random() * (6 - 1 + 1) + 1);
stu[i].score = (int)(Math.random() * (100 - 0 + 1));
}
for(int i = 0;i < stu.length;i++){
System.out.println(stu[i].info());
}
System.out.println("*********以下是问题1*********");
for(int i = 0;i < stu.length;i++){
if(stu[i].state == 3){
System.out.println(stu[i].info());
}
}
System.out.println("********以下是问题2**********");
for(int i = 0;i < stu.length - 1;i++){
for(int j = 0;j <stu.length - 1 - i;j++){
if(stu[j].score >stu[j+1].score){
Student temp = stu[j];
stu[j] = stu[j+1];
stu[j+1] = temp;
}
}
}
for(int i = 0;i < stu.length;i++){
System.out.println(stu[i].info());
}
}
}
class Student{
int number;
int state;
int score;
public String info(){
return "学号:" + number + ",年级:" + state + ",成绩:" + score;
}
}
练习四优化
public class StudentTest2 {
public static void main(String[] args) {
Student2[] stu = new Student2[20];
for(int i = 0;i <stu.length;i++){
stu[i] = new Student2();
stu[i].number = i + 1;
stu[i].state = (int)(Math.random() * (6 - 1 + 1) + 1);
stu[i].score = (int)(Math.random() * (100 - 0 + 1));
}
StudentTest2 test = new StudentTest2();
test.print(stu);
System.out.println("*********以下是问题1*********");
test.searchState(stu, 3);
System.out.println("********以下是问题2**********");
test.sort(stu);
for(int i = 0;i < stu.length;i++){
System.out.println(stu[i].info());
}
}
public void print(Student2[] stu){
for(int i = 0;i < stu.length;i++){
System.out.println(stu[i].info());
}
}
public void searchState(Student2[] stu,int state){
for(int i = 0;i < stu.length;i++){
if(stu[i].state == state){
System.out.println(stu[i].info());
}
}
}
public void sort(Student2[] stu){
for(int i = 0;i < stu.length - 1;i++){
for(int j = 0;j <stu.length - 1 - i;j++){
if(stu[j].score >stu[j+1].score){
Student2 temp = stu[j];
stu[j] = stu[j+1];
stu[j+1] = temp;
}
}
}
}
}
class Student2{
int number;
int state;
int score;
public String info(){
return "学号:" + number + ",年级:" + state + ",成绩:" + score;
}
}
理解"万事万物皆对象"
对象数组的内存解析
Student[] stus= newStudent[5];
stus[0] = new Student();
sysout(stus[0].state);
sysout(stus[1]);
sysout(stus[1].number);
stus[1] = new Student();
sysout(stus[1].number);
class Student{
int number;
int state = 1;
int score;
}
匿名对象的使用
public class InstanceTest {
public static void main(String[] args) {
Phone p = new Phone();
System.out.println(p);
p.sendEmail();
p.playGame();
new Phone().price = 1999;
new Phone().showPrice();
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 showPrice(){
System.out.println("手机价格为:" + price);
}
}
自定义数组的工具类
工具类
public class ArrayUtil {
public int getMax(int[] arr) {
int maxValue = arr[0];
for (int i = 1; i < arr.length; i++) {
if (maxValue < arr[i]) {
maxValue = arr[i];
}
}
return maxValue;
}
public int getMin(int[] arr) {
int minValue = arr[0];
for (int i = 1; i < arr.length; i++) {
if (minValue > arr[i]) {
minValue = arr[i];
}
}
return minValue;
}
public int getSum(int[] arr) {
int sum = 0;
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
public int getAvg(int[] arr) {
int avgValue = getSum(arr) / arr.length;
return avgValue;
}
public void reverse(int[] arr) {
for (int i = 0; i < arr.length / 2; i++) {
int temp = arr[i];
arr[i] = arr[arr.length - i - 1];
arr[arr.length - i - 1] = 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 null;
}
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) {
System.out.print("[");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + ",");
}
System.out.println("]");
}
public int getIndex(int[] arr, int dest) {
for (int i = 0; i < arr.length; i++) {
if (dest==arr[i]) {
return i;
}
}
return -1;
}
}
测试类
public class ArrayUtilTest {
public static void main(String[] args) {
ArrayUtil util = new ArrayUtil();
int[] arr = new int[]{32,5,26,74,0,96,14,-98,25};
int max = util.getMax(arr);
System.out.println("最大值为:" + max);
System.out.println("查找:");
int index = util.getIndex(arr, 5);
if(index > 0){
System.out.println("找到了,索引地址:" + index);
}else{
System.out.println("没找到");
}
}
}
4.5 再谈方法
方法的重载(overload)
public class OverLoadTest {
public static void main(String[] args) {
OverLoadTest test = new OverLoadTest();
test.getSum(1, 2);
}
public void getSum(int i,int j){
System.out.println("1");
}
public void getSum(double d1,double d2){
System.out.println("2");
}
public void getSum(String s,int i){
System.out.println("3");
}
public void getSum(int i,String s){
}
}
举例
1.判断:
与void show(int a,char b,double c){}构成重载的有:
a)void show(int x,char y,double z){}
b)intshow(int a,double c,charb){}
c) void show(int a,double c,char b){}
d) booleanshow(int c,char b){}
e) void show(double c){}
f) double show(int x,char y,double z){}
g) void shows(){double c}
编程
public class OverLoadever {
public static void main(String[] args) {
OverLoadever test = new OverLoadever();
test.mOL(5);
test.mOL(6, 4);
test.mOL("fg");
int num1 = test.max(18, 452);
System.out.println(num1);
double num2 = test.max(5.6, -78.6);
System.out.println(num2);
double num3 = test.max(15, 52, 42);
System.out.println(num3);
}
public void mOL(int i){
System.out.println(i*i);
}
public void mOL(int i,int j){
System.out.println(i*j);
}
public void mOL(String s){
System.out.println(s);
}
public int max(int i,int j){
return (i > j) ? i : j;
}
public double max(double i,double j){
return (i > j) ? i : j;
}
public double max(double d1,double d2,double d3){
double max = (d1 > d2) ? d1 : d2;
return (max > d3) ? max : d3;
}
}
可变个数的形参
JavaSE 5.0 中提供了Varargs(variable number of arguments)机制,允许
直接定义能和多个实参相匹配的形参
。从而,可以用一种更简单的方式,来传递个数可变的实参。
public class MethodArgs {
public static void main(String[] args) {
MethodArgs test = new MethodArgs();
test.show(12);
test.show(new String[] { "AA", "BB", "CC" });
}
public void show(int i) {
}
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) {
}
}
方法参数的值传递机制(重点!!!)
public class ValueTransferTest {
public static void main(String[] args) {
System.out.println("**********基本数据类型:***********");
int m = 10;
int n = m;
System.out.println("m = " + m + ", n = " + n);
n = 20;
System.out.println("m = " + m + ", n = " + n);
System.out.println("***********引用数据类型:********");
Order o1 = new Order();
o1.orderId = 1001;
Order o2 = o1;
System.out.println("o1.orderId = " + o1.orderId + ",o2.orderId = " + o2.orderId);
o2.orderId = 1002;
System.out.println("o1.orderId = " + o1.orderId + ",o2.orderId = " + o2.orderId);
}
}
class Order{
int orderId;
}
针对基本数据类型
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;
}
}
针对引用数据类型
public class ValueTransferTest2 {
public static void main(String[] args) {
Data data = new Data();
data.m = 10;
data.n = 20;
System.out.println("m = " + data.m + ", n = " + data.n);
ValueTransferTest2 test = new ValueTransferTest2();
test.swap(data);
System.out.println("m = " + data.m + ", n = " + data.n);
}
public void swap(Data data){
int temp = data.m;
data.m = data.n;
data.n = temp;
}
}
class Data{
int m;
int n;
}
练习1
public class TransferTest3{
public static void main(String args[]){
TransferTest3 test=new TransferTest3();
test.first();
}
public void first(){
int i=5;
Value v=new Value();
v.i=25;
second(v,i);
System.out.println(v.i);
}
public void second(Value v,int i){
i=0;
v.i=20;
Value val=new Value();
v=val;
System.out.println(v.i+" "+i);
}
}
class Value {
int i= 15;
}
练习2
public static void method(int a,int b){
a = a * 10;
b = b * 20;
System.out.println(a);
System.out.println(b);
System.exit(0);
}
练习3
for(int i= 0;i < arr.length;i++){
arr[i] = arr[i] / arr[0];
}
for(int i = arr.length –1;i >= 0;i--){
arr[i] = arr[i] / arr[0];
}
int temp = arr[0];
for(int i= 0;i < arr.length;i++){
arr[i] = arr[i] / temp;
}
练习4
public class ArrayPrint {
public static void main(String[] args) {
int[] arr = new int[]{1,2,3};
System.out.println(arr);
char[] arr1 = new char[]{'a','b','c'};
System.out.println(arr1);
}
}
练习5:将对象作为参数传递给方法
public class Circle {
double radius;
public double findArea(){
return radius * radius * Math.PI;
}
}
PassObject类
public class PassObject {
public static void main(String[] args) {
PassObject test = new PassObject();
Circle c = new Circle();
test.printAreas(c, 5);
System.out.println("no radius is:" + c.radius);
}
public void printAreas(Circle c,int time){
System.out.println("Radius\t\tAreas");
for(int i = 1;i time ;i++){
c.radius = i;
System.out.println(c.radius + "\t\t" + c.findArea());
}
c.radius = time + 1;
}
}
递归(recursion)方法
public class RecursionTest {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i 100; i++) {
sum += i;
}
System.out.println("sum = " + sum);
RecursionTest test = new RecursionTest();
int sum1 = test.getSum(100);
System.out.println("sum1 = " + sum1);
}
public int getSum(int n) {
if (n == 1) {
return 1;
} else {
return n + getSum(n - 1);
}
}
public int getSum1(int n) {
if (n == 1) {
return 1;
} else {
return n * getSum1(n - 1);
}
}
}
练习1
public class RecursionTest {
public static void main(String[] args) {
int value = test.f(10);
System.out.println(value);
}
public int f(int n){
if(n == 0){
return 1;
}else if(n == 1){
return 4;
}else{
return 2*f(n-1) + f(n-2);
}
}
public int f1(int n){
if(n == 20){
return 1;
}else if(n == 21){
return 4;
}else{
return 2*f1(n-1) + f1(n-2);
}
}
}
练习2
public class Recursion2 {
public static void main(String[] args) {
Recursion2 test = new Recursion2();
int value = test.f(10);
System.out.println(value);
}
public int f(int n) {
if (n == 1 || n == 2) {
return 1;
} else {
return f(n - 1) + f(n - 2);
}
}
}
关注公众号 ,更多笔记,等你来拿,谢谢