编程日记:Java学习之路(七)
对象和类
一、面向对象概述
编程思想:面向过程,面向对象
什么是对象?一切客观存在的事物都是对象
对象的组成:属性和方法
- 小对象构成大对象
- 对象之间互相调用方法
二、对象和类
- 计算机中的对象,就是一块连续的内存空间
- 创建一个对象,都要在内存中分配一块空间
- 内存中保存的数据都是生活中的对象和抽象
- 有用的属性保留,没用的属性不要
对象的要求:
- 各司其职:对象应该是简单的
- 弱耦合性:对象之间的关系应该尽量的弱
- 可重用性:尽可能避免重复性的工作
- 可扩展性:已有对象可以换成新的对象
面向对象的关键,软件开发的原则
什么是类?
- 类是对象的抽象,属于同一个类的所有对象都具备相同的属性。
- 类书客观对象在人脑中的主管反应,是人对对象的认识
- 类是对象的模板,程序员编写的类是用来创建对象的
类和对象的关系:对对象的抽象就是类,类的具体就是对象
如何编写一个类?:
1 class First { 2 public static void main(String[] args) { 3 System.out.println("Hello World"); 4 } 5 }
编写一个学生类:
学生类:
学生类的属性
- 姓名
- 年龄
学生类的方法
- 学习
定义属性就是定义变量:
- 在方法(函数)中定义的变量叫做局部变量
- 在方法(函数)外定义的变量叫做实例变量,也就是属性
实例变量的特点:
- 有默认值,也就是可以赋初始值
- 作用范围至少在类的内部
- 可以和局部变量的命名发生冲突
- 如果没有命名冲突,所有方法可以直接访问
- 如果发生命名冲突,方法中优先访问局部变量
定义方法就是定义函数:
- 方法的声明:修饰符组合 返回值类型 方法名(参数表) 抛出异常
- 表示这个类的对象能做什么
- 暂时不需要修饰
- 需要修饰符时顺序随意
- 方法的实现:
- 表示这个类的对象怎样做
- 不希望暴漏给别人
三、重载
重载是面向对象中特有的现象。
- 重载就是允许在一个类中定义多个同名的方法,但是这些方法的参数表不同:
- 形参个数不同
- 形参类型不同
- 形参顺序不同
在调用一个对象的方法时,编译器会根据实参的个数,类型和顺序,决定调用对象的哪个方法
- 编译时决定调用的方法
- 编译结束,调用的方法就被确定
- 也叫编译时多态
为什么要重载?
没有重载:由方法的调用者根据方法名决定调用那个方法
有重载:由编译器根据实参决定调用那个方法
我们经常使用的重载方法:
1 System.out.println("Hello"); 2 System.out.println(10); 3 System.out.println(10.0; 4 System.out.println('H'); 5 System.out.println(true); 6 System.out.println();
根据各司其职的原则,方法的调用者不知道方法内部的具体实现,不知道不同的方法之间的区别,所以不应该由方法的调用者决定调用那个方法
重载的作用:让一个对象的同类方法由于参数表不同造成的差异对方法的调用者屏蔽
1 class Student { 2 String name; 3 int age; 4 void study(){ 5 System.out.println("studying...."); 6 } 7 void study(String courseName){ 8 System.out.println("studying...."+courseName); 9 } 10 }
四、构造方法
什么是构造方法?
构造方法就是类中一种特殊的方法,也叫构造器:
- 没有返回值类型
- 方法名必须和类名完全相同,也可以重载
- 不允许手动调动
1 class Test { 2 String name; 3 int age; 4 Test(){ 5 } 6 Test(String a,int b){ 7 name = a; 8 age = b; 9 } 10 }
一个类可以没有方法,但是不能没有构造方法,如果定义类的时候没有写构造方法,编译器会自动增加公开的无参构造方法,以保证一个类无论如何至少有一个构造方法。
建议:主动提供构造方法。
构造方法在对象被创建事会被调用一次,调用之后对象就会创建完成了。
对象的创建过程(V1.0)
- 分配空间
- 给所有的属性附初始值
- 调用构造方法(构造方法将常用来给属性附初始值比较灵活)
创建对象:
//引用类型的变量叫做引用,调用构造方法 Test t1 = new Test(); //类名 变量名 = new 类型(参数表); Test t2 = new Test("退婚",3);
一般情况下我们创建一个对象的方式都是想这种:类名 变量名 = new 类型(参数表);
Test是一个引用,t1和t2保存的是地址
访问对象的属性:
- 变量名.属性名
调用对象的方法:
- 变量名.方法名(参数表)
- 必须指定调用那个对象的方法,调用不同的对象方法结果不同。
Tip:有人释怀,有人在风中爱了又爱

浙公网安备 33010602011771号