面向对象:
面向对象思想概述:
面向对象是基于面向过程的编程思想
面向对象思想特点
更符合我们的思想习惯的思想
可以将复杂的事情简单化
将我们从执行者变成了指挥者
。角色发生了转换
面向对象的思想举例
。买电脑
。洗衣服
。万物皆为对象
面向对象开发
就是不断的创建对象,使用对象,指挥对象做事情。
面向对象设计
其实就是在管理和维护对象之间的关系
面向对象特征
。封装
。继承
。多态
类与对象的关系
我们学习编程语言就是为了模拟现实世界的事物,实现信息化。比如:去超买东西的计费系统,去医院的挂号系统等。
表示一个现实世界的事物
。属性 就是该事物的描述信息
。行为 就是该事物能够做什么
。举例 学生事物
java语言最基本的单位是类,所以我们应该把事物用一个类来体现
类:一组相关的属性和行为的集合
对象:是该类事物的具体体现
举例:
。类 学生
。对象 班长就是一个对象
类的定义:
现实世界的事物
。属性 人的身高,体重等
。行为 人可以吃饭,学习等
java中用Class描述事物也是如此
。成员变量 就是事物的属性
。成员方法 就是事物的行为
定义类其实就是定义类的成员(成员变量和成员方法)
成员变量和局部变量的区别:
在类中的位置不同
成员变量类中方法外
局部变量方法内或者方法声明上
在内存中的位置不同
成员变量堆内存
局部变量栈内存
生命周期不同
成员变量随着对象的存在而存在,随着对象的消失而消失
局部变量随着方法的调用而存在,随着方法的调用完毕而消失
初始化值不同
成员变量有默认的初始化值
局部变量没有默认的初始化值,必须先定义,赋值,才能使用。
匿名对象:
匿名对象:就是没有名字的对象
。是对象的一种简化表达形式
匿名对象的两种使用情况
。对象调用方法仅仅使用一次的时候
。作为实际参数传递
创建一个ee类如下:
public class ee {
public static void output(){
System.out.println("匿名调用");
}
}
创建一个test类如下:
public static void main(String[]args) {
//TODO Auto-generated method stub
new ee().output();
}
结果:匿名调用
封装概述
是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
好处:
隐藏实现细节,提供公共的访问方式
提高了代码的复用性
提高安全性。
封装原则:
将不需要对外提供的内容都隐藏起来。
把属性隐藏,提供公共方法对其访问。
private关键字
是一个权限修饰符。
可以修饰成员(成员变量和成员方法)
被private修饰的成员只在本类中才能访问。
private最常见的应用:
把成员变量用private修饰
提供对应的getXxx()/setXxx()方法
一个标准的案例的使用
举例:
创建一个ee类
public class ee {
public int height=999;
private Stringname="无问东西";
public void output(){
System.out.println(name+height);
}
}
创建一个测试类My
public class my {
public static void main(String[]args) {
//TODO Auto-generated method stub
eesa=new ee();
System.out.println(sa.height);
System.out.println(sa.name);
}
}
结果:Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The field ee.name is not visible
由此可见可以访问publici修饰的成员变量,不能访问private修饰的成员变量
this关键字:
。This :代表所在类的对象的引用
。方法被哪个对象调用,this就代表那个对象
this是为了解决成员变量与局部变量重名的问题
含义:代表所在类的对象的引用
this使用
定义一个Demo类
public class Demo {
String tname="无问";
int height;
public String output(String tname){
System.out.println(tname);//当局部变量和成员变量相同时,变量采用就近原则;
System.out.println(this.tname);
return this.tname;
}
定义一个test类
public class test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Demo sa=new Demo();
System.out.println(sa.output("西东"));
}
结果:
西东
无问
无问
注:java中的6字心法:new对象,调方法
面向对象,是基于面向过程来说的,把我们从执行者,变成指挥者。
对比
Java | 生活中 |
类class | 事物 |
人 通过属性和功能来定义人 性别,年龄 身高 体重 姓名...属于人的属性 直立行走,看电影,属于人的功能 | |
要想使用一个类,必须对类进行实例化, 所谓的实例化,就创建该类的对象,然后后才能使用里面的功能和属性 对象 其实 就是该类的具体表现 创建类对象 可以借助一个关键字new |
构造方法:
。构造方法作用概述
给对象的数据进行初始化
。构造方法格式
方法名与类名相同
没有返回值类型,连void都没有
没有具体的返回值
。构造方法注意事项
如果你不提供构造方法,系统会给出默认构造方法
如果你提供了构造方法,系统将不再提供
构造方法也是可以重载的
一个基本类的标标准代码写法:
类
。成员变量
。构造方法
无参构造方法
带参构造方法
。成员方法
getXxx()
setXxx()
给成员变量赋值的方式
无参构造方法+setXxx()
带参构造方法
类的初始化:
Student s = new Student();在内存中做了哪些事情?
加载Student.class文件进内存
在栈内存为s开辟空间
在堆内存为学生对象开辟空间
对学生对象的成员变量进行默认初始化
对学生对象的成员变量进行显示初始化
通过构造方法对学生对象的成员变量赋值
学生对象初始化完毕,把对象地址赋值给s变量
构造方法作用概述
给对象的数据进行初始化
构造方法格式
方法名与类名相同
没有返回值类型,连void都没有
没有具体的返回值
构造方法注意事项
如果你不提供构造方法,系统会给出默认构造方法
如果你提供了构造方法,系统将不再提供
构造方法也是可以重载的
定义一个类Demo
public class Demo {
private String tname;
private int height;
public Demo(){
this.tname="不忘";
this.height=99;//自一个己定义构造函数,初始化成员变量
没有返回值类型,连void都没有
}
public String getTname() {
return tname;
}
public void setTname(String tname) {
this.tname = tname;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
}
定义一个类test
public class test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Demo sa=new Demo();
System.out.println(sa.getTname());//调用构造函数实现初始化
System.out.println(sa.getHeight());//99
sa.setHeight(88);//调用setHeight(int height)重新设置高度
System.out.println(sa.getHeight());//88
}
注:在类中对于成员变量,计算机会自动初始化,存储在堆中,构造函数不管你写不写出来,
它都会默认执行,如果你想在构造函数中初始化成员变量,那么你就必须写出来,自己重新定义。
也可以创建set()和get()函数来自己初始化成员变量。