面向对象
1、什么是面向对象的思想?
面向对象的思想是基于面向过程的思想发展而来的。
面向过程:强调的是实现功能的每一个步骤
面向对象:强调的是对象,然后由这个对象去调用功能
2、面向对象的特点:
1)、是一种更加符合我们现实生活习惯的思想
2)、可以将复杂的事情简单化
3)、我们从之前的参与者(执行者)变成了指挥者
类与对象的关系:
类:是一组相关的属性和行为的集合
对象:是该类事物的具体体现
举例: 类 学生
对象 班长就是一个对象
类的定义:
现实世界的事物
属性 : 人的身高,体重等
行为 :人可以学习,吃饭等
Java中用class描述事物也是如此, 成员变量 :就是事物的属性。 成员方法 : 就是事物的行为
定义类其实就是定义类的成员(成员变量和成员方法)
//创建一个老师类
class Teacher{
//定义teacher的属性(成员变量)
String name; //定义姓名
int age; //定义年龄
String sex; //定义性别
//定义teacher的行为(成员方法)
public void teach(){ //定义一个教学生的方法
System.out.println("教学生");
}
}
如何使用刚才创建的类呢?
创建对象: 类名 对象名 = new 类名();
调用方法: 对象名.成员变量 /对象名.成员方法
public class Test1 {
public static void main(String[] args) {
Teacher teacher=new Teacher();
teacher.age=22; //调用Teacher类的年龄属性,给其赋值
System.out.println(teacher.age); //输出
teacher.teach(); //调用Teacher类的成员方法
}
}
成员变量和局部变量的区别
1.在类中的位置不同
成员变量 :类中方法外 局部变量 :方法内或者方法声明上
2.在内存中的位置不同
成员变量 :堆内存 局部变量 :栈内存
3.生命周期不同
成员变量 :随着对象的存在而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
4.初始化值不同
成员变量:有默认的初始化值
局部变量: 没有默认的初始化值,必须先定义,赋值,才能使用。
注意:局部变量和成员变量的名字一样时,在方法调用时采用就近原则。
形式参数的问题
1.当形式参数是基本数据类型时,将来调用方法传入的是常量值,或者是该类型的变量。
class Number{
public int getSum(int a,int b){ //在一个类中定义一个求和方法
return a+b;
}
}
public class Test2 {
public static void main(String[] args) {
Number number=new Number();//在测试类中创建一个Number类的对象,只有创建了对象才能调用类中的方法
System.out.println(number.getSum(10,20));//调用Number类中的求和方法,并输出结果。
}
}
若在方法中对变量修改,不会影响到外部实际在栈内存中的值。
2.当形式参数是引用数据类型,调用方法传入的是该类对象的地址值
class Student2 {
public void study() { //在Student中创建一个学习的方法
System.out.println("学习");
}
}
class StudentTest2 {
public void function(Student2 s) { //创建StudentTest类,创建方法引用Student类的方法
s.study();
}
}
public class Test3 {
public static void main(String[] args) {
StudentTest2 studentTest2 = new StudentTest2();//想要调用function方法,需创建StudentTest2的对象
Student2 student2 = new Student2();//创建Student2的对象
studentTest2.function(student2); //调用方法
}
}
若在方法中对变量修改,会影响到外部实际堆内存中的值。
匿名对象
匿名对象:就是没有名字的对象,是对象的一种简化表示形式
匿名对象的两种使用情况 :
对象调用方法仅仅一次的时候 ;作为实际参数传递。
引用上面的学生类,new完对象后直接使用,:
class Student2 {
public void study() { //在Student中创建一个学习的方法
System.out.println("学习");
}
}
class StudentTest2 {
public void function(Student2 s) { //创建StudentTest类,创建方法引用Student类的方法
s.study();
}
}
public class Test3 {
public static void main(String[] args) {
StudentTest2 studentTest2 = new StudentTest2();//想要调用function方法,需创建StudentTest2的对象
Student2 student2 = new Student2();//创建Student2的对象
studentTest2.function(student2); //调用方法
new StudentTest2().function(new Student2());//当new 完对象后直接使用,没有使用变量名接收的对象,称之为匿名对象
}
}
注意:匿名对象不适合多次调用,每次new的时候都是一个新的匿名对象,会频繁的在堆内存中开辟空间,匿名对象使用完毕之后,无法使用第二次。
面向对象三大特征——封装https://blog.csdn.net/qq_52400447/article/details/122520149
版权归原作者 16年义务教育 所有, 如有侵权,请联系我们删除。