目录
一、面向对象编程概述
1.面向对象的程序设计思想
二、JAVA语言的基本元素:类和对象
1.类为何物?
2.对象为何物?
3.类的成员
4.如何完成面向对象?
三、类的成员——变量
1.如何声明变量
2.成员变量与局部变量
四、类的成员——方法
1.什么是方法?
2.格式
3.调用实例方法
4.方法的重载
五、对象数组
1.定义
2.注意
3.举例
六、类的成员——构造器
1.作用
2.格式
3.说明
4.代码
5.补充
总结
一、面向对象编程概述
1.面向对象的程序设计思想
- 以类为组织单位。
- 每种事物都具备自己的属性和行为/功能。
- 特点:适合解决复杂问题。代码扩展性强、可维护性高。
- 帮助我们从宏观上把握、从整体上分析整个系统。
- 不要把面向过程和面向对象对立起来,他们是相辅相成的。
二、JAVA语言的基本元素:类和对象
1.类为何物?
类:具有相同特征的事物的抽象描述,是抽象的、概念上的定义。
2.对象为何物?
对象(实例):实际存在的该类事物的每个个体,是具体的。
类可以视为一个集合,对象可以视为其中的元素。
3.类的成员
类的成员包括:成员变量(属性),成员方法(函数)。
4.如何完成面向对象?
(1)类的定义:使用关键字:class。
[修饰符] class 类名{
属性声明;
方法声明;
}
public class Person{
//声明成员变量(属性)
String name;//声明成员方法(函数)
public void study(){
System.out.println("人学习");}}
(2)对象的创建
①创建对象,使用关键字:new
②语法:
//方式1:给创建的对象命名
//把创建的对象用一个引用数据类型的变量保存起来,这样就可以反复使用这个对象了
类名 对象名 = new 类名();
//方式2:
new 类名()//也称为匿名对象
public class PersonTest {public static void main(String[] args) {Person p1 = new Person(); }
}
(3)对象调用属性或方法
①对象是类的一个实例,必然具备该类事物的属性和行为(即方法)。
②使用" 对象名.属性 " 或 " 对象名.方法 "的方式访问对象成员(包括属性和方法)
③举例:
public class PersonTest {public static void main(String[] args) {Person p1 = new Person();p1.name = "theodore_1022";p1.study();System.out.println(p1.name);}
}
④匿名对象
- 我们也可以不定义对象的句柄,而直接调用这个对象的方法。这样的对象叫做匿名对象。 如:new Person().eat();
- 使用情况如果一个对象只需要进行一次方法调用,那么就可以使用匿名对象。
- 我们经常将匿名对象作为实参传递给一个方法调用。
三、类的成员——变量
1.如何声明变量
[修饰符1] class 类名{
[修饰符2] 数据类型 成员变量名 [= 初始化值];
}
说明:
- 位置要求:必须在类中,方法外 。
- 常用的权限修饰符有:private、缺省、protected、public。其他修饰符:static、final。
- 数据类型 任何基本数据类型(如int、Boolean) 或 任何引用数据类型。
- 成员变量名属于标识符,符合命名规则和规范即可。
- 初始化值根据情况,可以显式赋值;也可以不赋值,使用默认值。
举例:
public class Person{private int age; //声明private变量 agepublic String name = “theodore”; //声明public变量 name
}
2.成员变量与局部变量
- 在方法体外,类体内声明的变量称为成员变量。
- 在方法体内部等位置声明的变量称为局部变量。
(1)相同点
- 变量声明的格式相同: 数据类型 变量名 = 初始化值
- 变量必须先声明、后初始化、再使用。
- 变量都有其对应的作用域。只在其作用域内是有效的
(2)不同点
- 声明位置和方式 (1)实例变量:在类中方法外 (2)局部变量:在方法体{}中或方法的形参列表、代码块中
- 在内存中存储的位置不同 (1)实例变量:堆 (2)局部变量:栈
- 生命周期 (1)实例变量:和对象的生命周期一样,随着对象的创建而存在,随着对象被GC回收而消 亡, 而且每一个对象的实例变量是独立的。 (2)局部变量:和方法调用的生命周期一样,每一次方法 被调用而在存在,随着方法执行的结束而消亡, 而且每一次方法调用都是独立。
- 作用域 (1)实例变量:通过对象就可以使用,本类中直接调用,其他类中“对象.实例变量” (2)局部变量:出了作用域就不能使用
- 修饰符 (1)实例变量:public,protected,private,final,volatile,transient等 (2)局部变 量:final 6、默认值 (1)实例变量:有默认值 (2)局部变量:没有,必须手动初始化。其中的形参比较特殊, 靠实参给它初始化。
(3)举例
public class Person{//声明成员变量(属性)String name;//声明成员方法(函数)public void study(){String name1 = "ttt"; //局部变量System.out.println("人学习");}
}
四、类的成员——方法
1.什么是方法?
- 方法是类或对象行为特征的抽象,用来完成某个功能操作。(方法/函数/过程)
- 将功能封装为方法的目的是,可以实现代码重用,减少冗余,简化代码。
- Java里的方法不能独立存在 ,所有的方法必须定义在类里。
2.格式
[修饰符] 返回值类型 方法名([形参列表])[throws 异常列表]{
方法体的功能代码
}
3.调用实例方法
(1)格式
对象.方法名([实参列表])
- 必须先声明后使用,且方法必须定义在类的内部。
- 调用一次就执行一次,不调用不执行。
- 方法中可以调用类中的方法或属性,不可以在方法内部定义方法。
(2)举例
public class Person{public static void main(String[] args) {Person p = new Person();p.name = "theodore";p.study();System.out.println(p.name);}//声明成员变量(属性)String name = "Theodore";//声明成员方法(函数)public void study(){String name1 = "ttt"; //局部变量System.out.println("人学习");}}
4.方法的重载
(1)概念及特点
- 方法重载:在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可。 参数列表不同,意味着参数个数或参数类型的不同。
- 重载的特点:与修饰符、返回值类型无关,只看参数列表,且参数列表必须不同。(参数个数或参 数类型)。调用时,根据方法参数列表的不同来区别。
- 重载方法调用:JVM通过方法的参数列表,调用匹配的方法。 先找个数、类型最匹配的 再找个数和类型可以兼容的,如果同时多个方法可以兼容将会报错
(2)形参与实参
- 形参:在定义方法时,方法名后面括号()中声明的变量称为形式参数,简称形参。
- 实参:在调用方法时,方法名后面括号()中的使用的值/变量/表达式称为实际参数,简称实参。
(3)可变个数的形参
方法名(参数的类型名 ...参数名)
- 可变参数:方法参数部分指定类型的参数个数是可变多个:0个,1个或多个
- 可变个数形参的方法与同名的方法之间,彼此构成重载
- 可变参数方法的使用与方法参数部分使用数组是一致的,二者不能同时声明,否则报错。
- 方法的参数部分有可变形参,需要放在形参声明的最后
- 在一个方法的形参中,最多只能声明一个可变个数的形参
五、对象数组
1.定义
数组的元素可以是基本数据类型,也可以是引用数据类型。当元素是引用类型中的类时,我们称为对象数组。
2.注意
对象数组,首先要创建数组对象本身,即确定数组的长度,然后再创建每一个元素对象,如果不创建, 数组的元素的默认值就是 null ,所以很容易出现 空指针异常NullPointerException 。
3.举例
public class Student {public String name;public int age;public int grade;
}public class Test01 {public static void main(String[] args) {Student[] students = new Student[5];students[0] = new Student();students[0].name = "张三";students[0].age = 18;students[0].grade = 12;students[1] = new Student();students[1].name = "李四";students[1].age = 17;students[1].grade = 11;students[2] = new Student();students[2].name = "王五";students[2].age = 19;students[2].grade = 12;students[3] = new Student();students[3].name = "赵六";students[3].age = 18;students[3].grade = 10;students[4] = new Student();students[4].name = "小七";students[4].age = 16;students[4].grade = 9;// 输出每个学生的信息for (Student student : students) {System.out.println("姓名:" + student.name + ",年龄:" + student.age + ",年级:" + student.grade);}// 计算平均年龄int totalAge = 0;for (Student student : students) {totalAge += student.age;}double averageAge = (double) totalAge / students.length;System.out.println("平均年龄为:" + averageAge);}
}
六、类的成员——构造器
1.作用
- new对象,并在new对象的时候为实例变量赋值。
- eg.Person p = new Person(“Theodore”,22) ;
2.格式
[修饰符] class 类名{
[修饰符] 构造器名(){
// 实例初始化代码
}
[修饰符] 构造器名(参数列表){
// 实例初始化代码
}
3.说明
- 构造器名必须与它所在的类名必须相同。
- 它没有返回值,所以不需要返回值类型,也不需要void。
- 构造器的修饰符只能是权限修饰符,不能被其他任何修饰。比如,不能被static、final、synchronized、abstract、native修饰,不能有return语句返回值。
4.代码
ublic class Student {private String name;private int age;// 无参构造public Student() {}// 有参构造public Student(String n,int a) {name = n;age = a;}public String getName() {return name;}public void setName(String n) {name = n;}public int getAge() {return age;}public void setAge(int a) {age = a;}public String getInfo(){return "姓名:" + name +",年龄:" + age;}
}
public class TestStudent {public static void main(String[] args) {//调用无参构造创建学生对象Student s1 = new Student();//调用有参构造创建学生对象Student s2 = new Student("Theodore",22);System.out.println(s1.getInfo());System.out.println(s2.getInfo());}
}
5.补充
- 当我们没有显式的声明类中的构造器时,系统会默认提供一个无参的构造器并且该构造器的修饰 符默认与类的修饰符相同。
- 当我们显式的定义类的构造器以后,系统就不再提供默认的无参的构造器了。
- 在类中,至少会存在一个构造器。
- 构造器是可以重载的。
总结
本篇对JAVA的类以及三个成员进行了详细介绍,便于理解和复习。部分内容源自网络,如有侵权,请联系作者删除,谢谢!