华杉研发九学习日记8
Java面向对象
一,方法的重载
方法的重载(overLoad) :
在同一个类中,方法名相同,参数列表不同【参数的个数不同,参数的数据类型不同,参数的顺序不同】,与返回值无关。
优势:
1.见名知意
2.为后期的常用类库做准备
3.简化了开发,简化了类库的学习的复杂度
/*
定义一个Hath类,在该类中定义多个方法,用来求其最大值
1.传入两个整数。至回最大值
2.传入三个整数。驱回最大简
3.传入两个小数。返回最大值
4.传入三个小数,返回最大阎
*/
// 方法重载的概念
// 可以实现在同一个类中定义多个具有相同的方法名的方法
// 同一个类中,方法名相同,参数列表不同][多数的个数不同]即可
public class Math {
public int getMax(int a, int b, int c){
return a>b?a>c?a:c:b>c?b:c;
}
public int getMax(int a, int b) {
return a > b ? a : b;
}
public double getMax(double a, double b){
return a > b ? a : b;
}
public double getMax(double a, double b, double c){
return a>b?a>c?a:c:b>c?b:c;
}
二,类中的数组
类中的属性和方法都是可以放置数组的。
比如属性的数据类型可以是所有的数据类型,包含数组
比如方法中也是可以对数组进行传入和返回的。
案例:
定义一个学生类(Student),包含属性(id name age sex hobby[])
还有方法:
say() 自我简介描述
sum() 传入本次考试的多门课程成绩,返回其总成绩。
sort() 传入次考试的多门课程成绩,返回降序后的成绩数组。
测试中创建多个对象,把对象放入到数组中,遍历数组打印年龄大于/小于20的所有的学生的相关信息。
Student类:
public class Student {
public int id;
public String name;
public int age;
public String sex;
public String hobby[];
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", sex=" + sex +
", hobby=" + Arrays.toString(hobby) +
'}';
}
public void say() {
System.out.println(id+" "+name+" "+age+" "+sex+" ");
for (int i = 0; i < hobby.length; i++) {
System.out.println(hobby[i]);
}
}
public int sum(int sc[]){
int sum = 0;
for (int i = 0; i < sc.length; i++) {
sum += sc[i];
}
return sum;
}
public int[] sort(int sc[]){
for (int i = 0; i < sc.length-1; i++) {
for (int j = 0; j < sc.length - i - 1; j++) {
if (sc[j] < sc[j + 1]) {
int temp = sc[j];
sc[j] = sc[j + 1];
sc[j + 1] = temp;
}
}
}
return sc;
}
}
测试类:
public class Test1 {
public static void main(String[] args) {
Student s1 = new Student();
s1.id=111;
s1.name="蜘蛛侠";
s1.sex="男";
s1.age=18;
String hb[]={"唱","跳","Rap","篮球"};
s1.hobby=hb;
s1.say();
// 定义数组,来保存各门功课的成绩
int sc[]={90,100,100,20,59};
int sum=s1.sum(sc);
System.out.println("总成绩:"+sum);
int psc[]=s1.sort(sc);
for(int hh:psc){
System.out.println(hh);
}
System.out.println("============================");
Student stu1 = new Student();
stu1.id=100;
stu1.name="张无忌";
stu1.sex="男";
stu1.age=22;
Student stu2 = new Student();
stu2.id=101;
stu2.name="赵明";
stu2.sex="女";
stu2.age=18;
Student stu3 = new Student();
stu3.id=102;
stu3.name="周芷若";
stu3.sex="女";
stu3.age=19;
// 数组
// Student stus[] = {stu1,stu2,stu3};
Student stus[] = new Student[3];
stus[0]=stu1;
stus[1]=stu2;
stus[2]=stu3;
for(int i=0;i<stus.length;i++){
if(stus[i].age<20){
System.out.println(stus[i].name);
}
}
}
}
三,构造器
构造器又称为构造方法,构造函数,构造器,主要作用就是用来创建对象的。
构造器是特殊的方法,是没有返回值,也没有void的。
无参的构造器格式:
public 构造器名(){
构造体;
}
有参的构造器格式:
public 构造器名(数据类型 变量名,数据类型 变量名){
this,属性名=变量名;
......
}
注意:
-
构造器的作用就是用来创建当前类的对象
-
构造器名必须和类名保持一致
-
如果一个类,没有提供构造器,则系统会帮我们提供一个无参的构造器用来创建对象
-
如果我们自己提供了构造器,系统就不会再提供无参的构造器了
-
构造器也支持方法的重载
-
有参的构造器主要用于在创建对象的同时为其属性赋值,简化属性赋值的过程
四,this关键字
this代表的就是当前对象的意思。
用法:
- 1.当全局变量和局部变量同名时,使用this调用全局变量
- 2.在同一个类的构造器中,使用this来调用当前类的另一个构造器,只执行其方法体而不在创建对象注意: this调用时必须是构造体中的第一行代码
public class A {
int age;
String name;
public A(){
this(23); // 调用另一个带有age的构造器的方法体
// this 必须在第一行
System.out.println("我是无参的构造器");
}
public A(int age) {
System.out.println("我是带有age的构造器");
this.age = age;
}
public static void main(String[] args) {
A a = new A();
}
}