java 面向对象
来源:互联网 发布:ubuntu 查看mysql状态 编辑:程序博客网 时间:2024/06/15 04:41
面向对象
1.1 面向对象思想概述及举例
l 概述
n 我们回想一下,这几天我们完成一个需求的步骤:首先是搞清楚我们要做什么,然后在分析怎么做,最后我们再代码体现。一步一步去实现,而具体的每一步都需要我们去实现和操作。这些步骤相互调用和协作,完成我们的需求。
n 在上面的每一个具体步骤中我们都是参与者,并且需要面对具体的每一个步骤和过程,这就是面向过程最直接的体现。
n 那么什么是面向过程开发呢? 面向过程开发,其实就是面向着具体的每一个步骤和过程,把每一个步骤和过程完成,然后由这些功能方法相互调用,完成需求。
n 面向过程的代表语言:C语言
n 当需求单一,或者简单时,我们一步一步去操作没问题,并且效率也挺高。可随着需求的更改,功能的增多,发现需要面对每一个步骤很麻烦了,这时就开始思索,能不能把这些步骤和功能在进行封装,封装时根据不同的功能,进行不同的封装,功能类似的封装在一起。这样结构就清晰了很多。用的时候,找到对应的类就可以了。这就是面向对象的思想。
l 面向对象的思想
n 面向对象是基于面向过程的编程思想.
n 面向过程:强调的是每一个功能的步骤
n 面向对象:强调的是对象,然后由对象去调用功能
l 特点
n 是一种更符合我们思考习惯的思想
n 可以将复杂的事情简单化
n 将我们从执行者变成了指挥者
u 角色发生了转换
l 举例
n 买电脑
u 面向过程:我要买电脑--我要明确买电脑的意义--上网查对应的参数信息--去中关村买电脑--讨价还价--买回电脑
u 面向对象:我要买电脑--班长去给我买电脑--买回电脑
n 洗衣服
u 面向过程:把衣服脱下来--找一个盆--放点洗衣粉--加点水--浸泡10分钟--揉一揉--清洗衣服--拧干--晾起来
u 面向对象:把衣服脱下来--打开全自动洗衣机--扔衣服--按钮--晾起来
1.2 类与对象及其使用
l 类与对象关系
n 我们学习编程语言,就是为了模拟现实世界的事物,实现信息化。比如:去超市买东西的计费系统,去银行办业务的系统。
n 我们如何表示一个现实世界事物呢:
u 属性 就是该事物的描述信息
u 行为 就是该事物能够做什么
u 举例:学生事物
n 我们学习的Java语言最基本单位是类,所以我们就应该把事物用一个类来体现。
n 类:是一组相关的属性和行为的集合
n 对象:是该类事物的具体体现
n 举例:
u 类 学生
u 对象 班长就是一个对象
l 类的定义
n 现实世界的事物
u 属性 事物的描述信息
u 行为 事物能做什么
n Java中用class描述事物也是如此
u 成员变量 就是事物的属性
u 成员方法 就是事物的行为
n 定义类其实就是定义类的成员(成员变量和成员方法)
u 成员变量:和以前定义变量是一样的,只不过位置发生了改变。在类中,方法外。
u 成员方法:和以前定义方法是一样的,只不过把static去掉,面向对象进阶在详细讲解static的作用。
publicclass Student {
//成员变量
//姓名
String name;
//年龄
intage;
//成员方法
//学习的方法
publicvoid study() {
System.out.println("好好学习,天天向上");
}
//吃饭的方法
publicvoid eat() {
System.out.println("学习饿了要吃饭");
}
}
l 对象的创建及其使用
n 创建对象:
类名对象名 = new 类名();
n 使用对象访问类中的成员:
u 对象名.成员变量
u 对象名.成员方法
publicclass Demo01Student {
publicstaticvoidmain(String[]args) {
//创建对象格式:类名对象名 = new类名();
Student s= new Student();
System.out.println("s:"+s);//cn.itcast.demo02.Student@100363
//直接输出成员变量值
System.out.println("姓名:"+s.name);//null
System.out.println("年龄:"+s.age);//0
System.out.println("----------");
//给成员变量赋值
s.name ="赵丽颖";
s.age = 18;
//再次输出成员变量的值
System.out.println("姓名:"+s.name);//赵丽颖
System.out.println("年龄:"+s.age);//18
System.out.println("----------");
//调用成员方法
s.study();
s.eat();
}
}
l 手机类练习
n 定义手机类
publicclass Phone {
//品牌
String brand;
//价格
int price;
//颜色
String color;
//打电话
publicvoid call(Stringname) {
System.out.println("给"+name+"打电话");
}
//发短信
publicvoid sendMessage() {
System.out.println("群发短信");
}
}
n 手机类的测试类
publicclass Demo02Phone {
publicstaticvoidmain(String[]args) {
//创建对象
Phone p= new Phone();
//输出成员变量值
System.out.println("品牌:"+p.brand);//null
System.out.println("价格:"+p.price);//0
System.out.println("颜色:"+p.color);//null
System.out.println("------------");
//给成员变量赋值
p.brand ="锤子";
p.price= 2999;
p.color ="棕色";
//再次输出成员变量值
System.out.println("品牌:"+p.brand);//锤子
System.out.println("价格:"+p.price);//2999
System.out.println("颜色:"+p.color);//棕色
System.out.println("------------");
//调用成员方法
p.call("唐嫣");
p.sendMessage();
}
}
1.3 对象的内存图
l 定义Phone类
publicclass Phone {
String brand;
intprice;
String color;
publicvoid call(Stringname) {
System.out.println("给"+name+"打电话");
}
publicvoid sendMessage() {
System.out.println("群发短信");
}
}
l 一个对象的内存图
publicclass Demo01Phone {
publicstaticvoidmain(String[]args) {
Phone p= new Phone();
System.out.println(p.brand +"---" + p.price +"---"+ p.color);
p.brand ="锤子";
p.price = 2999;
p.color ="棕色";
System.out.println(p.brand +"---" + p.price +"---"+ p.color);
p.call("林青霞");
p.sendMessage();
}
}
l 两个引用,指向同一个对象的内存图
publicclass Demo03Phone {
publicstaticvoidmain(String[]args) {
Phone p1= new Phone();
p1.brand ="OPPO";
p1.price = 2999;
p1.color ="白色";
System.out.println(p1.brand+"---"+p1.price+"---"+p1.color);
Phone p2= p1;
p2.brand ="魅族";
p2.price = 1999;
p2.color ="蓝色";
System.out.println(p1.brand+"---"+p1.price+"---"+p1.color);
System.out.println(p2.brand+"---"+p2.price+"---"+p2.color);
}
}
1.4 成员变量和局部变量的区别
l 在类中的位置不同
n 成员变量:类中,方法外
n 局部变量:方法中或者方法声明上(形式参数)
l 在内存中的位置不同
n 成员变量:堆内存
n 局部变量:栈内存
l 生命周期不同
n 成员变量:随着对象的创建而存在,随着对象的消失而消失
n 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
l 初始化值的不同
n 成员变量:有默认值
n 局部变量:没有默认值。必须先定义,赋值,最后使用
publicclass DemoVariable {
intx;
publicvoidshow() {
inty = 0;
System.out.println(x);
System.out.println(y);
}
}
1.5 封装
l private关键字由来及其使用
n private关键字:
u 是一个权限修饰符。
u 可以修饰成员(成员变量和成员方法)
u 被private修饰的成员只在本类中才能访问。
public class Student {
String name;
//int age;
privateintage;
publicvoid setAge(inta) {
if(a<0 ||a>200) {
System.out.println("你给的年龄有误");
}else {
age =a;
}
}
publicint getAge() {
returnage;
}
publicvoid show() {
System.out.println("姓名是:"+name+",年龄是:"+age);
}
}
publicclass DemoStudent {
public staticvoid main(String[]args) {
//创建学生对象
Students = newStudent();
s.show();
s.name ="柳岩";
//s.age =18;
//s.age =-18;
//s.setAge(-18);
s.setAge(28);
s.show();
}
}
n private最常见的应用:
u 把成员变量用private修饰
u 提供对应的getXxx()/setXxx()方法
u 一个标准的案例的使用
l 成员变量私有的标准代码
Public class Student {
private Stringname;
privateintage;
publicvoid setName(Stringn) {
name =n;
}
public String getName() {
returnname;
}
publicvoid setAge(inta) {
age =a;
}
publicint getAge() {
returnage;
}
}
Publicclass DemoStudent {
Public staticvoid main(String[]args) {
//创建对象
Student s= new Student();
System.out.println(s.getName()+"---"+s.getAge());
s.setName("赵丽颖");
s.setAge(18);
System.out.println(s.getName()+"---"+s.getAge());
}
}
l 封装的概述和好处
n 封装概述
u 是面向对象三大特征之一
u 是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改。就像刚才说的年龄。
n 封装原则:
u 将不需要对外提供的内容都隐藏起来。
u 把属性隐藏,提供公共方法对其访问。
u 成员变量private,提供对应的getXxx()/setXxx()方法
n 好处:
u 通过方法来控制成员变量的操作,提高了代码的安全性
u 把代码用方法进行封装,提高了代码的复用性
1.6 this关键字
l this关键字的由来
n this:代表所在类的对象引用
n 记住:方法被哪个对象调用,this就代表那个对象
l this关键字的使用
n 局部变量隐藏成员变量(局部变量和成员变量重名)
publicclass Student {
private Stringname;
privateintage;
publicvoid setName(Stringname) {
//name = name;
this.name =name;
}
public String getName() {
returnname;
}
publicvoid setAge(intage) {
//age = age;
this.age =age;
}
publicint getAge() {
returnage;
}
}
publicclass DemoStudent {
publicstaticvoidmain(String[]args) {
//创建对象
Student s= new Student();
System.out.println(s.getName()+"---"+s.getAge());
s.setName("柳岩");
s.setAge(18);
System.out.println(s.getName()+"---"+s.getAge());
}
}
1.7 构造方法
l 作用
n 给对象的数据进行初始化
l 格式
n 方法名与类名相同
n 没有返回值类型,连void都没有
n 没有具体的返回值
修饰符构造方法名(参数列表){
}
l 注意事项
n 如果你不提供构造方法,系统会给出默认构造方法
n 如果你提供了构造方法,系统将不再提供
n 构造方法也是可以重载的
Public class Student {
private Stringname;
privateintage;
/*
public Student() {
System.out.println("构造方法");
}
*/
public Student() {}
public Student(Stringname) {
this.name =name;
}
public Student(intage) {
this.age =age;
}
public Student(Stringname,intage) {
this.name =name;
this.age =age;
}
publicvoid show() {
System.out.println(name+"---"+age);
}
}
Publicclass DemoStudent {
Public staticvoid main(String[]args) {
//如何调用构造方法呢?
//通过new关键字调用
//格式:类名对象名 = new构造方法(...);
Student s= new Student();
s.show();
//publicStudent(String name)
Student s2= new Student("赵丽颖");
s2.show();
//publicStudent(int age)
Student s3= new Student(18);
s3.show();
//publicStudent(String name,int age)
Student s4= new Student("赵丽颖",18);
s4.show();
}
}
l 标准学生类代码编写和测试
n 类
u 成员变量
u 构造方法
l 无参构造方法
l 带参构造方法
u 成员方法
l getXxx()
l setXxx()
n 给成员变量赋值的方式
u 无参构造方法+setXxx()
u 带参构造方法
n 练习
u 学生类(老师讲)
publicclass Student {
//成员变量
private Stringname;
privateintage;
//构造方法
public Student() {}
public Student(Stringname,intage) {
this.name =name;
this.age =age;
}
//成员方法
publicvoid setName(Stringname) {
this.name =name;
}
public String getName() {
returnname;
}
publicvoid setAge(intage) {
this.age =age;
}
publicint getAge() {
returnage;
}
}
publicclassDemoStudent {
publicstaticvoidmain(String[]args) {
//无参+setXxx()
Student s= new Student();
s.setName("柳岩");
s.setAge(18);
System.out.println(s.getName()+"---"+s.getAge());
//带参构造
Student s2= new Student("赵丽颖",18);
System.out.println(s2.getName()+"---"+s2.getAge());
}
}
u 手机类(学生练)
u 汽车类(学生练) Car 属性:颜色,品牌,价钱… 功能:行驶
- java----Java面向对象
- java----Java面向对象
- java----Java面向对象
- java----Java面向对象
- java----Java面向对象
- java----Java面向对象
- 【java】java面向对象
- 【Java】Java面向对象
- java面向对象(一) 了解面向对象
- Java面向对象概述
- java面向对象
- JAVA面向对象
- JAVA 面向对象??
- Java面向对象特性
- Java面向对象特性
- java基础 面向对象
- Java面向对象程序设计
- java面向对象
- angular4: Unhandled Promise rejection Cannot assign to a reference or variable
- R语言rdom包简介
- 浏览器拦截新窗口打开的问题
- springcloud(一):大话Spring Cloud
- Socket与Serversocket的写出问题
- java 面向对象
- OpenStack-M版(Mitaka)搭建基于(Centos7.2)+++十二、Openstack编排服务服务(heat)
- Integer和int的区别
- 1445 变色DNA(最短路)
- oracle数据库表的约束constraints
- 报数问题
- springcloud(二):注册中心Eureka
- banner自定义
- 深入理解Java中的final关键字