面向对象编程(基础)
类与对象
●使用现有技术解决
张老太养了两只猫猫:一只名字叫小白,今年3岁,白色。还有一只叫小花,今年100岁,花色。请编写一个程序,当用户输入小猫的名字时,就显示该猫的名字,年龄,颜色。如果用户输入的小猫名错误,则显示张老太没有这只猫猫。
1)单独的定义变量解决
2)使用数组解决- //单独变量来解决=>平利于数据的管理
- //第1只猫信息
- String cat1Name = "小白";
- int cat1Age = 3;
- String cat1Color ="白色";
- //第2只猫信息
- String cat2Name = "小花";int cat2Age = 100;
- String cat2Color ="花色";
- //数组===>(1)数据类型体现不出来(2)只能通过[下标]获取信息,造成变量名字和内容
- // 的对应关系不明确(3)不能体现猫的行为
- //第1只猫信息
- String[] cat1 = {"小白","3","白色"};
- String[] cat2 ={"小花","100","花色"};
复制代码 ●现有技术解决的缺点分析
不利于数据的管理
效率低
===》 引出我们的新知识点类与对象哲学,道家思想
java设计者引入类与对象(OOP),根本原因就是现有的技术,不能完美的解决新的新的需求.
●类与对象的关系示意图

●上图说明
注意:从猫类到对象,目前有几种说法:1.创建一个对象⒉.实例化一个对象3.把类实例化...
当然:上面的猫也可是鱼、狗、人... java最大的特点就是面向对象。- public class HelloWorld{
- public static void main(String []args){
- //1. new Cat()创建一只猫
- //2.Cat cat1 = new Cat();把创建的猫赋给cat1
- //3. cat1就是一个对象
- Cat cat1 = new Cat();
- cat1.name ="小白";
- cat1.age = 3;
- cat1.color ="白色";
- //创建了第二只猫,并赋给cat2
- // cat2 也是一个对象(猫对象)
- Cat cat2 = new Cat();
- cat2.name ="小花";
- cat2.age = 100;
- cat2.color ="花色";
- //怎么访问对象的属性呢
- System.out.println("第1只猫信息" + cat1.name +" " +cat1.age + " "+ cat1.color);
- System. out.println("第2只猫信息"+ cat2.name +" " + cat2.age + " " + cat2.color);
- }
- }
- //使用面向对象的方式来解决养猫问题
- //
- //定义一个猫类Cat ->自定义的数据类型
- class Cat {
- //属性
- String name;//名字
- int age;//年龄
- String color;//颜色
- //行为
- }
复制代码 ●类和对象的区别和联系
通过上面的案例和讲解我们可以看出:
- 类是抽象的,概念的,代表一类事物,比如人类,猫类.…,即它是数据类型.
- 对象是具体的,实际的,代表一个具体事物,即是实例.
- 类是对象的模板,对象是类的一个个体,对应一个实例.

属性/成员变量
基本介绍
- 从概念或叫法上看:成员变量=属性= field(字段)(即成员变量是用来表示属性的,授课中,统一叫属性)。例如: Car(name,price,color)
- 属性是类的一个组成部分,一般是基本数据类型,也可是引用类型(对象,数组)。比如我们前面定义猫类的int age就是属性。
●注意事项和细节说明
- 属性的定义语法同变量,示例:访问修饰符属性类型属性名;
- 属性的定义类型可以为任意类型,包含基本类型或引用类型
- 属性如果不赋值,有默认值,规则和数组一致。
如何创建对象
- 先声明再创建
Cat cat ;
cat = new Cat();
- 直接创建
Cat cat = new Cat();
如何访问属性
●基本语法
对象名.属性名;
案例演示赋值和输出
cat.name ;
cat.age;
cat.color;
类和对象的内存分配机制(重要)
●看一个思考题
我们定义一个人类(Person)(包括名字,年龄)。- //我们看看下面一段代码:
- Person p1=new Person();
- p1.age=10;
- p1.name="小明";
- Person p2=p1;//把p1赋给了p2, 让p2指向p1
- System.out.println(p2.age);
- //请问:p2.age究竟是多少?并画出内存图:
- //10
复制代码
●Java内存的结构分析
1.栈:一般存放基本数据类型(局部变量)
2.堆:存放对象(Cat cat,数组等)
3.方法区:常量池(常量,比如字符串),类加载信息
4.示意图[Cat (name, age, price)
●Java创建对象的流程简单分析- Person p = new Person();
- p.name = "jack” ;
- p.age = 10
复制代码 1.先加载Person类信息(属性和方法信息,只会加载一次)
2在堆中分配空间,进行默认初始化(看规则)
3.把地址赋给p,p就指向对象
4.进行指定初始化,比如p.name =" jack" p.age = 10
●看一个练习题,并分析画出内存布局图,进行分析- //我们看看下面一段代码,会输出什么信息:
- Person a=new Person();
- a.age=10;
- a.name="小明";
- Person b;
- b=a;
- System.out.println(b.name);
- b.age=200;
- b = null;
- System.out.println(a.age);
- System.out.println(b.age);
- /*
- 小明
- 200
- b.age会出现异常.
- */
复制代码
成员方法
基本介绍
在某些情况下,我们要需要定义成员方法(简称方法)。比如人类:除了有一些属性外(年龄,姓名..),我们人类还有一些行为比如:可以说话、跑步..,通过学习,还可以做算术题。这时就要用成员方法才能完成。现在要求对Person类完善。
●成员方法快速入门
<ol>添加speak成员方法,输出我是一只好人
添加cal01成员方法,可以计算从1+...+1000的结果
添加cal02成员方法,该方法可以接收一个数n,计算从1+...+n 的结果
添加getSum成员方法,可以计算两个数的和
[code]public class HelloWorld{ public static void main(String []args){ //方法使用 //1方法写好后,如果不去调用(使用),不会输出 //2.先创建对象,然后调用方法即可 Person p1 = new Person(); p1.speak();//调用方法 p1.cal01();//调用cal01方法 p1.cal02(5);//调用cal02方法 //调用getSum方法,同时num1=10, num2=20 //把方法 getsum返回的值,赋给变量 returnRes int returnRes = p1.getSum(10,20); System.out.println("getsum方法返回的值=" + returnRes); }}class Person { String name; int age; //方法(成员方法) //添加speak成员方法,输出“我是一个好人” //解读 //1.public 表示方法是公开 //2.void :表示方法没有返回值 //3.speak() : speak是方法名,()形参列表 //4.方法体,可以写我们要执行的代码 //5.System.out.println("我是一个好人");表示我们的方法就是输出一句话 public void speak(){ System.out.println("我是一个好人"); } //添加cal01 成员方法,可以计算从1+..+1000的结果 public void cal01(){ //循环完成 int res = 0; for(int i = 1; i |