- 参数传递(重点掌握)
- 内部类(理解)
- 工具类
- 数组排序
总结:
* 类名作为方法的形参传递的是什么?
传递的是地址值
* 类名作为方法的返回值返回的是什么?
返回的是该对象的地址值
总结:
类名作为方法的返回值和参数,要的是该类型的对象
案例代码:
public class Test {
public static void main(String[] args) {
Student stu = new Student("张三", 13);
System.out.println(stu);
useStudent(stu);
System.out.println("~~~~~~~~~~~~~~~~~~~");
Student student = getStudent();
System.out.println(student);
student.show();
}
/**
类名作为方法的返回值和参数,要的是该类型的对象
*/
public static void useStudent(Student student) {
System.out.println(student);
student.show();
}
public static Student getStudent() {
// 创建学生并返回
Student stu = new Student("李四", 14);
System.out.println(stu);
return stu;
}
}
总结:
* 抽象类作为方法的形参传递的是什么?
抽象类的子类对象 --> 地址值
* 抽象类作为方法的返回值返回的是什么?
返回的是抽象类子类对象 --> 地址值
总结:
* 接口作为方法的形参传递的是什么?
接口的实现类的对象
* 接口作为方法的返回值返回的是什么?
返回的是该接口的实现类的对象
- 什么是内部类?
- 内部类有哪些分类?
总结:
1.什么是内部类?
类中有类
描述一个事物的时候,发现另外一个事物随之存在的, 这个事物称之为内部类
内部类所在类,称之为外部类
2.内部类的分类?
静态内部类
成员内部类
局部内部类
匿名内部类
内部类与外部类之间的关系: 包含的关系
- 如何定义成员内部类?
- 创建成员内部类对象的格式为?
总结:
* 格式
public class 外部类{
修饰符 class 内部类{
}
}
* 创建成员内部类对象的格式
* 间接调用
在外部类成员的位置 ,定义 一个方法,在方法内部创建内部类的对象
* 直接调用
* 普通成员内部类
外部类.内部类 内部类的对象 = new 外部类() . new 内部类();
* 静态内部类
外部类.内部类 内部类的对象 = new 外部类.内部类();
- 局部内部类的定义位置为?
- 如何使用局部内部类?
总结:
* 局部内部类的定义位置
在外部类的方法内定义了一个类
* 如何使用局部内部类
只能在该方法内使用内部类
- 什么是匿名内部类?
- 匿名内部类的格式是什么?
总结:
1.什么是匿名内部类?
存在于方法内的没有名字的一个类
2.匿名内部类的格式是什么?
new 抽象类/接口(){
重写抽象类和接口中所有的抽象方法
}.方法名();
匿名对象: 没有名字的对象就是匿名对象
Student stu = new Student(); 有名字的对象,名字是stu
new Student(); 没有名字的对象 匿名对象
抽象类/接口名 对象名 = new 抽象类/接口(){
重写抽象类和接口中所有的抽象方法
};
对象名.方法名();
案例代码:
Inter接口
public interface Inter {
void eat();
}
AnonymousDemo类(测试类)
public class AnonymousDemo {
public static void main(String[] args) {
//有名字的匿名内部类对象
Inter inter = new Inter() {
@Override
public void eat() {
System.out.println("eating...");
}
};
//使用匿名内部类对象的对象名调用方法
inter.eat();
System.out.println("---------");
//匿名的匿名内部类对象直接调用自己的方法
new Inter(){
@Override
public void eat() {
System.out.println("eat");
}
}.eat();
useInter(new Inter() {
@Override
public void eat() {
System.out.println("匿名内部类对象作为参数传递");
}
});
useInter(getInter());
}
public static void useInter(Inter inter) {
//匿名内部类对象作为参数传递
inter.eat();
}
public static Inter getInter() {
//返回值为匿名内部类对象
return new Inter() {
@Override
public void eat() {
System.out.println("返回值为匿名内部类对象");
}
};
}
}
* 案例演示:
一般都是在方法传递的时候,来进行使用
* 方法摘要
>* public static double abs(double num): 取绝对值 | |
>* public static double ceil(double num): 向上取整
>* public static double floor(double num):向下取整
>* public static long round(double num): 四舍五入
>* public static int max(int a, int b) : 求最大值
>* public static int min(int a, int b) : 求最小值
>* public static double pow(double a, double b): Math.pow(2,3);
>* public static double random() : 随机的范围[0,1) new Random
>* Math.PI -> 圆周率
* System类的常用方法
>* public static void exit(int status):终止当前运行的Java虚拟机非零表示异常终止
>* public static long currentTimeMillis():返回当前时间(以毫秒为单位)
- 什么是Object类?
- Object中常用的两个方法?
总结:
1.什么是Object类?
类 Object 是类层次结构的根类。
每个类都使用 Object 作为超类。
所有对象(包括数组)都实现这个类的方法。
2.Object中常用的两个方法
toString();
equals();
- Object类中的toString方法返回的是什么?
总结:
1. Object类中的toString方法返回的是什么?
* 如果重写了toString方法
打印的是对象中的属性的值,而不是地址值
* 如果没有重写toString方法
地址值
问题: toString方法的作用?
方便打印对象中的属性的值
- equals方法的作用?
- equals方法跟==号的区别?
总结:
1.equals方法的作用
比较两个对象的地址值
2.equals方法和==的区别
* ==
如果比较的是基本数据类型 比较的是具体的数值是否相等
如果比较的是引用数据类型 比较的是地址值是否相等
* equals
* 如果没有重写Object中的equalse方法
比较的是两个对象的地址值
* 如果重写了Object中的equalse方法
按照自己的比较规则进行比较两个对象中的内容
* equals重写后的代码:
public boolean equals(Object o) {
/*
自己跟自己比较 有意义吗? 没有
如果是自己跟自己比较,直接返回true
*/
if (this == o) return true;
/*
o == null : 空值 ,调用方法会出现空指针异常
getClass() != o.getClass() : 比较的对象 是否是来自于同一个类的
getClass 方法获取一个类的字节码对象的 Class
*/
if (o == null || getClass() != o.getClass()) return false;
// 多态向下转型
Student student = (Student) o;
if (this.age != student.age) return false;
return name != null ? name.equals(student.name) : student.name == null;
}
冒泡排序:
/*
冒泡排序:
一种排序的方式,对要进行排序的数据中相邻的数据进行两两比较,将较大的数据放在后面,
依次对所有的数据进行操作,直至所有数据按要求完成排序
*/
public class ArrayDemo {
public static void main(String[] args) {
//定义一个数组
int[] arr = {24, 69, 80, 57, 13};
System.out.println("排序前:" + arrayToString(arr));
/*
//第一次比较
for(int i=0; i arr[i+1]) {
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
System.out.println("第一次比较后:" + arrayToString(arr));
//第二次比较
for(int i=0; i arr[i+1]) {
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
System.out.println("第二次比较后:" + arrayToString(arr));
//第三次比较
for(int i=0; i arr[i+1]) {
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
System.out.println("第三次比较后:" + arrayToString(arr));
//第四次比较
for(int i=0; i arr[i+1]) {
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
System.out.println("第四次比较后:" + arrayToString(arr));
*/
// 外层循环控制的是 比较多少次
for(int x=0; x<arr.length-1; x++) {
// 内层循环 每一次跟谁比较
for(int i=0; i<arr.length-1-x; i++) {
if(arr[i] > arr[i+1]) {
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
}
System.out.println(Arrays.toString(arr));
// System.out.println("排序后:" + arrayToString(arr));
}
//把数组中的元素按照指定的规则组成一个字符串:[元素1, 元素2, ...]
public static String arrayToString(int[] arr) {
StringBuilder sb = new StringBuilder();
sb.append("[");
for (int i = 0; i < arr.length; i++) {
if (i == arr.length - 1) {
sb.append(arr[i]);
} else {
sb.append(arr[i]).append(", ");
}
}
sb.append("]");
String s = sb.toString();
return s;
}
}
ublic static String arrayToString(int[] arr) {
StringBuilder sb = new StringBuilder();
sb.append("[");
for (int i = 0; i < arr.length; i++) {
if (i == arr.length - 1) {
sb.append(arr[i]);
} else {
sb.append(arr[i]).append(", ");
}
}
sb.append("]");
String s = sb.toString();
return s;
}
}