一、概念:
所谓面向对象是一种编程思想,通过这种思想可以吧生活中的复杂事情变的简单化,从原来的执行者变成指挥者,面向对象是基于面向过程而言的,面对对象强调结果,比如你要去上学,强调的是去学校,这个动作就是面向对象,而面向过程强调过程,强调的是你去学校的过程,比如骑自行车骑啊骑啊的去。
二、类与对象
- 定义
所谓类,就是将具有相似的行为或者属性的事物抽象或者集合形成一个类,就如动物类,人类,植物类
所谓对象,通常表现为实体,是类的具体实例,万物皆对象,比如动物类有猫狗这些等等 - 类与对象的关系
对象是类的实例,类是对象的模板 - 生活中的类与对象
计算机语言是用来描述现实世界事物的。属性+行为,那怎么通过java语言描述呢?通过类来描述事物,把事物的属性当做成员变量,把行为当做成员方法,比如生活中有手机这个事物,手机具有的
- 属性:尺寸,品牌,价格,颜色
- 方法:打电话,发短信,听音乐
- 类:手机类,抽取属性和行为
- 对象:iPhone手机啊,华为手机啊,小米手机啊
- 类与对象的创建和使用
通过class关键字创建类,通过new关键字创建对象。
public class Test1 { public static void main(String[] args) { //p是引用对象,持有了对于Person对象的地址值的引用 //此时的p,含有属性,但都是默认值 Person p = new Person(); //设置属性值 p.name="lisi"; p.age=20; //调用方法 p.eat(); p.sleep(); } } class Person{ //属性--成员变量 String name; int age; //行为--方法 void eat(){ System.out.println("吃饭饭"); } void sleep(){ System.out.println("睡觉觉"); } }
三、类与对象在内存中的存储
java内存分为5大块,推,虚拟机栈,本地方法栈,方法区,程序计数器,我们基础阶段主要学习栈,推
- 一般来讲局部变量存在栈中,方法执行完毕内存就被释放
- 对象(new出来的东西)存在堆中,对象不再被使用时,内存才会被释放
- 每个堆内存的元素都有地址值
- 对象中的属性都是有默认值的
- 在栈内存中,创建一个引用变量p,持有对象的地址值
- 在堆内存中,创建Person对象,并且开辟变量的空间,完成初始化
- 给堆内存中的元素,分配一个唯一标志,地址值。交给p去保存。
- p.name=”lisi”;p.age=20;就去堆内存中找唯一的地址值,找到Person对象,并对其属性进行修改赋值。
- p.eat();就去堆内存中找唯一的地址值,找到Person对象,执行Person对象的方法。
四、封装——面向对象的三大特征之一
封装是指隐藏对象的属性和实现细节,由private关键字修饰,当一个类的属性或者方法不想让其他类访问时,可以用private修饰,仅仅对外提供公共的访问方式。由set(),get()方法提供,封装的好处是:
- 提高安全性
- 提高重用性
class Person{ //成员属性 private int age; private String name; //成员方法 void eat(){ System.out.println("吃饭"); } void sleep(){ System.out.println("睡觉"); } private void work() { System.out.println("上班"); } } public class Text_private { public static void main(String[] args) { //在测试类里创建Perso对象 Person person = new Person(); //person.age = 18;//报错,private修饰不能使用 //person.work(); person.eat(); person.sleep(); } }
运行结果
**解决方法:**对外提供set(),get()方法 在eclipse中,位于source栏下面的Getters and Setters,自动生成设置和获取属性的方法
class Person{ //成员属性 private int age; private String name; //获取属性的方法 public int getAge() { return age; } //设置属性的方法 public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } //成员方法 void eat(){ System.out.println("吃饭"); } void sleep(){ System.out.println("睡觉"); } private void work() { System.out.println("上班"); } } public class Text_private { public static void main(String[] args) { //在测试类里创建Perso对象 Person person = new Person(); person.setAge(18); person.setName("迪丽热巴"); System.out.println(person.getAge()); System.out.println(person.getName()); person.eat(); person.sleep(); } }
运行结果
五、构造方法
- 定义
构造方法也叫构造函数,构造器,构造方法是一种特殊的方法,它是一个与类同名且没有返回值类型的方法。对象的创建就是通过构造方法来完成,其功能主要是完成对象的创建或者对象的初始化。当类实例化一个对象时会自动调用构造方法。构造方法和其他方法一样也可以重载,构造方法可以自己定义也可以使用系统提供的默认构造方法。 - 形式
可以无参也可以有参修饰符 类名(【参数】) { 代码…… }
- 1
- 2
- 3
- 练习
- 构造方法创建对象
- 构造方法对对象初始化
class Person{ //成员属性 private int age; private String name; //无参构造方法 Person(){} //有参构造方法 Person(int age,String name){ this.age = age; this.name = name; } @Override public String toString() { return "Person [age=" + age + ", name=" + name + "]"; } } public class Text_private { public static void main(String[] args) { //在测试类里创建Perso对象 //创建一个匿名对象(没有名字的对象) new Person(); //创建Person对象 Person person = new Person(); //创建Person对象并对属性初始化 Person person1 = new Person(18,"迪丽热巴"); //将对象以字符串输出 System.out.println(person1.toString()); } }
运行结果