黑马程序员—面向对象知识总结

来源:互联网 发布:编程入门语言 编辑:程序博客网 时间:2024/05/23 20:23

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

一面向对象概述

(1)面向对象:是基于面向过程的一种思想。
面向过程:以函数为基础,关注实现过程。
面向对象:以对象为基础,关注实现结果。

(2)面向对象的思想特点:
A:是一种更符合人们思考习惯的思想。
B:把复杂的事情简单化了。
C:角色发生了转换,执行者–>指挥者
(3)举例:吃烤鸭
面向过程:
买鸭苗
养鸭子
杀鸭子
学烤鸭
买烤鸭的工具
买烤鸭的材料
做烤鸭

面向对象:去烤鸭店
(4)面向对象思想三大特征:
1.封装
2.继承
3.多态

二对象和类
我们学习计算机语言,那么计算机语言是干嘛的?
对现实世界的描述–>实现了信息化–>虚拟化

事物是如何体现的呢?
A:属性 有哪些特征
B:行为 有哪些功能
属性: 脸 ,眼镜 ,腿 ,腰 –>天生的
功能: 爱旅游,爱音乐, 琴棋书画 –>后天的

学生:
成员变量(属性):姓名,年龄,身高,性别,学号
成员方法(功能):学习,吃饭,睡觉,敲代码

手机:
属性:像素,大小,价格,形状,内存,品牌,型号
功能:玩游戏,拍照,打电话,发信息,看电影,上网,

Java中最基本描述事物的单位是类
类:是一组相关的”属性”和”行为”的集合;
对象:是该类事物的具体体现;

定义类 {
成员变量
成员方法
}

三类的定义:
1.使用关键字:class(注意小写)
2.一个java源文件中:
1).如果定义多个类,但只有一个是public的;而且源文件名必须与这个public的类名一致;
2).如果定义多个类,可以没有public类;源文件名没有一致性要求;
3).main()方法不是必须放在public类中;
3.类中可以定义什么:
1).成员变量:
A.可以是基本数据类型,也可以是任何引用数据类型;
B.可以显示初始化;
class Student{
String name = “张三” ;
int age = 20;
}
C.可以隐式初始化;
整型:0
浮点:0.0
字符:’\u0000’
布尔:false
引用类型:null
2).成员方法:
A.可以有参数,可以没参数;
可以有返回值,可以没有返回值;

B.方法的"形参"可以是任何Java类型(基本数据类型、引用数据类型)C.方法的"返回值"可以是任何Java类型(基本数据类型、引用数据类型)D.一个类中可以定义多个同名的方法,但形参列表不完全相同,叫:方法的重载;

3).内部类(后面讲);
4.成员变量和局部变量的区别:
1).成员变量:
A.定义在”类体”中;可以是任何数据类型;
B.会被自动初始化;
class Student{
String name;
void show(){
System.out.println(“我叫:” + num); //打印:我叫:null
}
}
C.当实例化对象后,被存储在”堆”中;
D.当”对象”不被使用(没有任何引用),并被垃圾回收器回收时被清理;

2).局部变量:
A.定义在某个方法、或其它代码块中;
B.必须显示初始化,否则不能访问其值;
class Student{
void show(){
String name;
System.out.println(“我叫:” + name); //编译错误。局部变量必须显示初始化才能访问其值;
name = “张三”; //OK。可以被赋值。
}
}
C.当方法或其它代码块被执行时,基本数据类型的”值”和引用数据类型的”引用”都是存储在”栈”中;
D.当方法或代码块执行完毕时,会被立即清理;
4.成员变量和局部变量的区别:
1).成员变量:
A.定义在”类体”中;可以是任何数据类型;
B.会被自动初始化;
class Student{
String name;
void show(){
System.out.println(“我叫:” + num); //打印:我叫:null
}
}
C.当实例化对象后,被存储在”堆”中;
D.当”对象”不被使用(没有任何引用),并被垃圾回收器回收时被清理;

2).局部变量:
A.定义在某个方法、或其它代码块中;
B.必须显示初始化,否则不能访问其值;
class Student{
void show(){
String name;
System.out.println(“我叫:” + name); //编译错误。局部变量必须显示初始化才能访问其值;
name = “张三”; //OK。可以被赋值。
}
}
C.当方法或其它代码块被执行时,基本数据类型的”值”和引用数据类型的”引用”都是存储在”栈”中;
D.当方法或代码块执行完毕时,会被立即清理;

四.对象的使用:
1.创建对象使用new关键字;会在堆中分配内存空间;
格式:
类名 变量名 = new 类名();
2.一个类可以创建多个对象;
3.每个“对象”的“成员变量”在”堆”中都有一份独立的空间;
每个“对象”的“成员方法”被存储在“方法区”中,多个对象只有一个“方法空间”;
4.对象的”引用(地址)”被存储在”栈”中;
五.方法的形参:
1.可以是”基本数据类型”:
1).调用时,必须传递此类型的“值”;
2).调用时,是将值复制一份到方法内部;
3).在方法内,使用形参接收此值的副本;
4).在方法内,如果更改此值,对原值没有影响;
int a = 10;
show(a);
System.out.println(a);
———————————-
public void show(int n){//n = 10
n = 20;
}
2.可以是“引用数据类型”:
1).调用时,必须传递此类型的“引用”;
2).调用时,是将“引用(地址)”复制一份到方法内部;
3).在方法内,使用形参接收此“引用”的副本;
4).在方法内,如果通过此引用更改堆中的值,对原堆中的值将会产生影响;
六.匿名对象:
1.匿名对象:没有名字的对象:new Student();
2.匿名对象的两种使用情况:
1).对象调用方法仅仅一次的时候:new Student().show();
2).作为实际参数传递:printStudent(new Student());

七代码实现

class Demo02{    public static void main(String[] args)     {        //创建Person类的三个对象        Person p = new Person();        Person p2 = new Person();        Person p3 = new Person();        System.out.println(p);        System.out.println(p2);        System.out.println(p3);        //为p这个对象的属性赋值        p.age = 18;        p.name = "花千骨";        p.sex = "女";        System.out.println("姓名:"+p.name+"("+p.sex+") 年龄:"+p.age);        //为p2这个对象的属性赋值              p2.age = 22;        p2.name = "白子画";        p2.sex = "男";        System.out.println("姓名:"+p2.name+"("+p2.sex+") 年龄:"+p2.age);        //如果没有给对象的属性赋值,由于在堆内存中,所以有默认值        System.out.println("姓名:"+p3.name+"("+p3.sex+") 年龄:"+p3.age);        //调用P对象的吃饭、睡觉、打豆豆的方法        p.eat();        p.sleep(3);        String s = p.hitBeanBean(6);        System.out.println(s);        p2.eat();        p2.sleep(1);        System.out.println(p2.hitBeanBean(20));    }}//定义一个人类class Person{    //年龄    int age;    //姓名    String name;    //性别    String sex;    //吃饭    public void eat() {        System.out.println("我吃了!");    }    //睡觉    public void sleep(int times) {        System.out.println("我今天睡了"+times+"觉");    }    //打豆豆    public String hitBeanBean(int times) {        return name+"今天打了"+times+"次豆豆!心情好了,敲代码!";    }}
0 0