文章目录
其他Java基础文章
面向对象基础
01-面向过程与面向对象
02-两个要素:类和对象
概念:
类(Class)和对象(Object)是面向对象的核心概念。
- 类是对一类事物的描述,是抽象的、概念上的定义。
- 对象是实际存在的该类事物的每个个体,因而也称为实例(instance)。
类的成员构成:
03-对象的创建和使用
类的访问机制
1、在一个类中的访问机制:类中的方法可以直接访问类中的成员变量。(例外:static方法访问非static,编译不通过
。)
2、在不同类中的访问机制:先创建要访问类的对象,再用对象访问类中
定义的成员。
内存解析
class Car{
String color = "red";
int num = 4;
void show(){
System.out.println("color="+color+"..num="+num);
}
}
class CarTest {
public static void main(String[] args) {
Car c1 = new Car(); //建立对象c1
Car c2 = new Car(); //建立对象c2
c1.color = "blue"; //对对象的属性进行修改
c1.show(); //使用对象的方法
c2.show();
}
}
对象数组的内存解析:
匿名对象
1、 我们也可以不定义对象的句柄,而直接调用这个对象的方法。这
样的对象叫做匿名对象。如:new Person().shout();
2、如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象。我们经常将匿名对象作为实参传递给一个方法调用
。
匿名对象的使用:
public class InstanceTest {
public static void main(String[] args) {
Phone p = new Phone();
// p = null;
System.out.println(p);
p.sendMail();
p.playGame();
// 匿名对象
new Phone().price = 5999;
new Phone().showPrice(); // 0.0 两次new的对象不同
// 匿名对象的使用
PhoneMall mall = new PhoneMall();
mall.show(new Phone());
}
}
class PhoneMall {
public void show(Phone phone) {
phone.sendMail();
phone.playGame();
}
}
class Phone {
double price;
public void sendMail() {
System.out.println("发邮件");
}
public void playGame() {
System.out.println("打游戏");
}
public void showPrice() {
System.out.println("手机的价格为:" + price);
}
}
04-类的成员之一:属性(field)
语法格式
语法格式:修饰符 数据类型 属性名 = 初始化值 ;
1、常用的权限修饰符有:private、缺省、protected、public
;其他修饰符:static、final (暂不考虑)
2、数据类型:任何基本数据类型
(如int、Boolean) 或 任何引用数据类型
。
3、属性名: 属于标识符,符合命名规则和规范即可。
举例:
public class Person{
private int age; //声明private变量 age
public String name = “Lila”; //声明public变量 name
}
变量的分类
成员变量与局部变量:
1、在方法体外,类体内声明的变量称为成员变量。
2、在方法体内部声明的变量称为局部变量。
成员变量和局部变量的区别:
对象属性的默认初始化赋值
05-类的成员之二:方法(method)
方法的声明格式
【注意】
1、没有具体返回值的情况,返回值类型用关键字void表示,那么方法体中可以不必使用return语句。如果使用,仅用来结束方法。
2、方法中只能调用方法或属性,不可以在方法内部定义方法。
练习-类的设计
2、利用面向对象的编程方法,设计类Circle计算圆的面积。
练习-方法声明
3-1、编写程序,声明一个method方法,在方法中打印一个108 的型矩形,
在main方法中调用该方法。
3-2、修改上一个程序,在method方法中,除打印一个108的型矩形外,再
计算该矩形的面积,并将其作为方法返回值。在main方法中调用该方法,
接收返回的面积值并打印。
3-3、修改上一个程序,在method方法提供m和n两个参数,方法中打印一个
mn的型矩形,并计算该矩形的面积, 将其作为方法返回值。在main方法
中调用该方法,接收返回的面积值并打印。
练习-对象数组
4、定义类Student,包含三个属性:学号number(int),年级state(int),成绩
score(int)。 创建20个学生对象,学号为1到20,年级和成绩都由随机数确定。
问题一:打印出3年级(state值为3)的学生信息。
问题二:使用冒泡排序按学生成绩排序,并遍历所有学生信息。
【提示】:
1)生成随机数:Math.random(),返回值类型double;
2) 四舍五入取整:Math.round(double d),返回值类型long。
5、声明一个日期类型MyDate:有属性:年year,月month,日day。创建2个日期对象,分别赋值为:你的出生日期,你对象的出生日期,并显示信息。
自定义数组的工具类
- ArrayUtil:求数组的最大值、求数组的最小值、求数组总和、求数组平均值、反转数组、复制数组、数组排序、遍历数组、查找指定元素
冒泡排序:
1、第一层循环是用来控制趟数,也就是n 个数就要比较 n-1 趟
;那么第二层循环能不能具体解答一下呢?
2、第二层是控制第 i + 1 趟
(因为循环中 i 是从 0 开始的)的比较次数,那么 i+1 趟就是比较了N - 1 - i
次。
/*
* 自定义数组工具类
*/
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 getSum(int[] arr) {
int sum = 0;
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
// 反转数组
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