对象(类) = 属性(成员) + 行为(方法)
对象机制(属性)
class Object {
public static void main(String[] args) {
Person a = new Person();
a.age = 10;
a.name = "小明";
Person b;
b = a;
System.out.println(b.name);//小明
b.age = 200;
b = null;//地址置空,所以b此时不再是对象
System.out.println(a.age);//200
System.out.println(b.age);//出现异常
}
}
class Person{
int age;
String name;
}
方法调用
class Main {
//多次调用数据并显示
public static void main(String[] args) {
int arr[][] = { {1, 2, 3},
{2, 3, 4},
{3, 4, 5}};
MyTools arr1 = new MyTools();
arr1.toolArr(arr);//第一次调用数组
arr1.toolArr(arr);//第二次调用数组
}
}
class MyTools{
public void toolArr(int a[][]){
for(int i = 0; i < a.length; i++){
for(int j = 0; j < a[i].length; j++){
System.out.print(a[i][j] + "\t");
}
System.out.println();
}
}
}
优点:提高代码复用性; 可以将实现的细节封装,供其他用户调用。
练习1
class Main {
//返回一个值以上可以使用数组
public static void main(String[] args) {
MyTools arr1 = new MyTools();
int a[] = arr1.toolArrSumAndSub(4,5);//使用合适的数据类型来调用方法 并返回数组
//如果不使用整型数组来接收,选择直接输出显示的话,会出现乱码
for(int i = 0; i < a.length; i++){
System.out.print(a[i] + " ");
}
}
}
class MyTools{
public int[] toolArrSumAndSub(int a, int b){//返回值类型选择 整数型数组 -> 用 int[] 代替void
//即 要求返回值类型必须和return值的类型一致或兼容
int[] resArr = new int[2];
resArr[0] = a + b;
resArr[1] = a - b;
return resArr;
}
}
递归
算法思路 终端显示 非动画前后端版小游戏
//未完成 不会
import java.util.Scanner;
import java.util.Math;
class Main {
public static void main(String[] args) {
//012.静态版八皇后 8*8的棋盘上 任何两个皇后不可以互相攻击 且不在同一行、列、斜线上 求摆法有多少种
//可以二维数组表示行列 也可以一维数组表示行,让他们的数值代表列,靠算法
Scanner myScanner = new Scanner(System.in);
System.out.print("输入皇后个数:");
num = myScanner.nextInt();
int[] arr = new int[num]; //创建棋盘空间
Tool eQueen = new Tool(); //调用
System.out.println("Hello world! - java.jsrun.net ");
}
}
class Tool {
public void check(int[] arr, int num) {
if(num == arr.length) {
}
}
public boolean queen(int[] arr, int n) { //棋盘一维数组 和 要摆放的皇后行号
for(int i = 0; i < n; i++) {
if((Math.abs(i - n) == Math.abs(arr[i] - arr[n])) || arr[i] == arr[n]) {//同斜线 同列
return false;
}
}
return true;
}
public void each(int[] arr) {
for(int i = 0; i < arr.length; i++) {
System.out.print(a[i] + " ");
}
}
}
可变参数
优化方法的 参数 的办法
可变参数可以看成是一个数组 可接收同数据类型的0-n个参数
对应的实参可以传入n个同数据类型的数,也可以直接传入同数据类型的数组
一个形参列表只能有一个可变参数
但一个形参列表除了可变参数还可以有其他类型的参数,但需要放在可变参数前面
class Main {
public static void main(String[] args) {
//可变参数的运用 输出学生姓名和n个成绩之和
Tool student = new Tool();
System.out.println(student.showScore("张三", 66.5, 89, 75));
}
}
class Tool {
public String showScore(String name, double... scores) {
double totalScore = 0; //计算总成绩
for(int i = 0; i < scores.length; i++) {
totalScore += scores[i];
}
return name + " " + scores.length + "门课的总成绩为 " + totalScore;
}
}
构造器及this关键字
class Main {
public static void main(String[] args) {
//013.
// System.out.println("Hello world! - java.jsrun.net ");
Person p1 = new Person("mary", 20);
// Person p2 = new Person("smith", 27); //信息不同 测试 false
Person p2 = new Person("mary", 20);
System.out.println(p1.compareTo(p2));
}
}
class Person {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public boolean compareTo(Person p) { // 比较是否一致
// 年龄和姓名完全一致
// if(this.name.equals(p.name) && this.age == p.age) {
// return true;
// } else {
// return false;
// }
return this.name.equals(p.name) && this.age == p.age; //比较 方法二
}
}