- 本文原创作者:元芳,你怎么看
面向对象
what?面向对象?什么对象?何为对象?在这里各位同学可能再这里就有点懵逼了,不要慌,小场面,看完本篇你应该会有所了解。
那什么是对象呢?对象即独立的个体,拥有独立的属性,具有不同的行为,世界就是由许多个独立的个体组成的,这也就是所谓的万物皆对象。
例如
一个班级里的每一个同学都是一个个对象。
一个机房里每一台电脑都是一个对象等。
我们生活中处处存在对象,就等你去了解。
学生所拥有的学号,名字;电脑所拥有的mac地址。这就是他们的属性(对象的属性)
学生能干什么;电脑能干什么。这就是他们的行为(方法)即(对象的方法)
有图有真相
面向对象编程 : 可以理解为举办一场活动,细化到每一个人,哪一个人干什么事,然后每个人干完自己要干完的事,这场活动也就举办好了。
面向对象的思想: 把一个复杂的事情给分化,分发给每一个人(每个对象),由他们自己去做,不用管他怎么做,只需要结果就行。
面向对象的三大特征:封装、继承、多态。
面向对象的三大特征后面博文会学到。
类
什么是类?类就是某些对象具有的相同特性,把相同特性抽取出来,这就出现了类。也就是说类是描述了这些对象的相同特性。类就是创造事物的模板,我们可以根据这个模板创造出许多事物。
有图有真相
那么如何创建对象呢?
首先我们定义一个Java实体类
public class Student {
/**
* 定义两个成员变量 name,gender
*/
private String name;
private String gender;
/**
* 定义两个构造方法
*/
public Student() {
}
public Student(String name, String gender) {
super();
this.name = name;
this.gender = gender;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Student [name=" + name + ", gender=" + gender + "]";
}
}
再定义一个测试类TestStudent,在main方法里创建对象
public class TestStudent {
public static void main(String[] args) {
/**
* 两种写法,一种分句写,一种不分句
* 都需要使用new关键字
* 先声明一个Student类型变量
* 然后通过构造方法创建实例
* 再把实例赋值给变量,就有了student对象了
*/
//分句
Student student1;
student1=new Student();
//不分句
Student student2 = new Student();
System.out.println("student1:"+student1);
System.out.println("student2:"+student2);
/**
* 上面两个对象都是空对象,为给属性赋值
* 接下来,我们给属性赋值就不是空了
*/
System.out.println("分割线://");
student1.setName("ew");
student1.setGender("男");
System.out.println("student1:"+student1);
}
}
结果:
抽象
抽象方法是面向对象的最基本的方法,也是最重要的方法之一
类的形成就是抽象,抽象就是把一系列的对象实例的共同特性抽取的过程,它强调主要特征,忽略次要特征
一个对象是现实世界中一个实体的抽象,一个类是一组对象的抽象
变量
变量又分为成员变量(全局变量)以及局部变量。那么问题来了,什么是成员变量,什么是局部变量。
成员变量以及局部变量的区别:
1.范围
- 成员变量在其整个类里都是有效的
- 局部变量只在声明其的方法内有效
2.生命周期
- 成员变量的生命周期与对象一致
- 局部变量的生命周期为使用完就被回收
3.存储位置
- 成员变量是属于对象的,对象存储在堆内存里,那么它也在堆里
- 局部变量是存储在栈里的,当不被使用就会被回收掉
4.初始值
- 成员变量如果没有被初始化值,那它的默认值为变量的默认值
- 局部变量如果要使用必须手动初始话值,否则无法使用
package com.ew;
public class Student {
/**
* 定义两个成员变量 name,gender
*/
private String name;
private String gender;
public void run() {
//局部变量
String study="学习编程语言";
System.out.println("计科系会"+study);
}
/**
* 定义两个构造方法
*/
public Student() {
}
public Student(String name, String gender) {
this.name = name;
this.gender = gender;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Student [name=" + name + ", gender=" + gender + "]";
}
}
实现类
package com.ew;
public class TestStudent {
public static void main(String[] args) {
//使用构造方法注入属性
Student student=new Student("ew", "18");
System.out.println(student);
student.run();
}
}
结果:
匿名对象
匿名对象顾名思义就是没有名字的对象,即该对象没有对应的变量名引用。通常的用途为当对象只需要使用一次方法时使用或者当实参传入时,从而简化代码。为什么不调用属性,因为那样毫无意义。经匿名对象设置的属性永远无法获取,任何两个匿名对象做==比较,都是false。
package com.ew;
public class TestStudent {
public static void main(String[] args) {
TestStudent student=new TestStudent();
//不使用匿名对象
Student s=new Student("ewcc", "18");
student.test(s);
//使用匿名对象
student.test(new Student("ew", "18"));
}
public void test(Student s) {
System.out.println(s+"他会学习");
}
}
结果: