day06

    xiaoxiao2021-03-25  86

    面向对象

    一、概述。

    1.面向对象的概述

    1)面向过程:完成一件事情的时候,我们关心的是每一步怎么完成,重点是过程。 2)面向对象: 完成一件事情的时候,我们关心的是谁能完成这个事情,我们就招谁。 重点是谁能完成(谁就是我们要对象)

    2.面向对象的思想特点:

    1)更符合人们的思考习惯 , 比如:你想吃饭你不会找种麦子的人,找饭店的老板 2)将复杂的事情简单化。 比如: 不用自己去关注米---》 怎么变成饭的 3)从执行者变为指挥者。 比如:原来的衣服得自己,现在的衣服女票洗。(你是指挥者,女票是执行者)

    3.类与对象

    类:class HelloWorld{} 咱们定义的类的作用,完成一个功能 类:javaBean 用来描述一个事物的属性和行为的。 举例: 寻狗启事 描述属性: 毛色 品种 年龄 性别 名字 描述行为: 会咬人 会看门 所以:我们用类来描述现实生活中的事物,把这个事物的属性抽取出来变成字段, 把事物的行为抽取出来变成方法。 我们定义一个类:用来描述Dog class Dog { //属性(成员变量/字段) String color = "黄色"; String brand = "金毛"; int age = 2; String sex = "公"; String name = "大宝贝"; //行为--(方法) public void bite(){ System.out.println("我不咬人"); } }

    4、类与对象的关系:

    类我们可以看做一个模子(月饼的模子,用来做月饼), 对象就是根据模子造出来的月饼。 类就是一栋建筑的图纸,对象是根据图纸创建出来的实在的建筑。

    5.练习:

    定义一个学生类包含以下内容 属性:姓名和年龄 方法:学习和吃放方法 /* * 这是一个Student类,作用是用于描述学生 * * 属性:成员变量 * name * age */ public class Student { //姓名属性 String name = "班长"; int age = 18; //学生的学习方法 public void study(){ System.out.println("班长学的很认真,真的"); } //吃饭的方法 public void eat(){ System.out.println("班长喜欢吃肉"); } }

    6.对象的创建,属性和方法的访问

    我要使用Student,新建一个class Test{ main } 在main方法里面:创建Student对象 1)对象的创建格式: 类名 对象名 = new 类名(); Student stu = new Student(); <------------> int[] arr = new int[5]; 2)如何使用Student类中的属性 调用属性的格式: 对象名.属性名 = 赋值; stu.name = "张三"; System.out.println(stu.name); 3)方法调用 格式: 对象名.方法名(); stu.study(); 练习2: 在主方法中创建学生类对象 为学生类中的所有属性赋值 调用学生的学习方法 /* * 该类作用:测试Student类 在主方法中创建学生类对象 为学生类中的所有属性赋值 调用学生的学习方法 */ public class TestStu { public static void main(String[] args) { //1.创建对象 Student stu = new Student(); //2.调用属性,并给属性赋值 stu.name = "尹志平"; stu.age = 38; System.out.println(stu.name); //stu.name 获取到该对象的属性 System.out.println(stu.age); //stu.age 获取到该对象的属性 //3.调用学习的方法 stu.study(); } }

    二、成员变量和局部变量

    1.成员变量与局部变量的区别:

    代码中的位置: 成员变量在类中方法外 局部变量:方法中或方法声明上 内存中的区域: 成员变量在堆内存 局部变量在栈内存 生命周期区别: 成员变量随着对象的创建而创建,随着对象的消失而消失。 局部随着方法的调用而存在,随着方法的弹栈而消失 初始化值区别: 成员变量有默认初始化值 局部变量没有默认初始化值,如果要使用必须先赋初值。

    2.private关键字

    权限访问修饰符: public protected 不写(默认权限访问修饰符) private private :能够修饰成员变量和成员方法。 被private修饰的成员变量和成员方法,只能在本类中使用。 如果你用private修饰成员变量? 我就无法给你对象的成员变量赋值,也获取不到。 解决办法:提供两个公有方法,通过方法来设置属性,通过方法来获取属性。 如果直接操作属性,程序无法控制, p.name = -20; 如果用方法的方式来给属性赋值,获取属性: 我可以在方法中控制你设置的值,获取的内容。 在方法中用if 语句,别的控制语句,来限制你输入的内容是否合理。保证程序的安全。 简单的例子: public class Dog { private String name; /* * 提供方法给name属性设置值 * 设置:不需要返回值类型 * 参数:要把参数传递过来给对象设置,所以参数类型为String name */ public void setName(String a){ name = a; } /* * 提供方法获取name属性 * 要获取,要有返回值 String * 参数:不需要参数 */ public String getName(){ return name; } }

    3.练习

    定义一个学生类 属性:姓名和年龄 生成对应的getter/setter方法 新建一个测试类测试学生类 package privatetest; /* * 定义一个学生类 属性:姓名和年龄 生成对应的getter/setter方法 新建一个测试类测试学生类 */ public class Student { private String name; //姓名属性 private int age; //年龄属性 /* * set方法给name属性赋值 * 返回值类型:void * 参数列表: String a */ public void setName(String a){ name = a; } /* * 获取要得到值,所以返回值类型是String * 参数: 无 */ public String getName(){ return name; } public void setAge(int a){ age = a; } public int getAge(){ return age; } } public class TestStu { public static void main(String[] args) { Student stu = new Student(); stu.setName("老王"); stu.setAge(38); System.out.println(stu.getName() + " , 的年龄是:" + stu.getAge()); } }

    4.封装

    什么是封装: 狭义的封装: 隐藏事物的实现细节,对外提供公共的访问方式。(提高程序的安全性) 比如:我们用private修饰成员变量,隐藏实现细节,提供set 和get方法这样的公共的访问方式。 广义的封装: 我们把一类功能封装到一个方法中,算是一种封装(提高程序的复用性) 把多个方法封装到一个类中,也算封装。 把多个类封装到一个包中。 问题:封装就是使用private修饰属性。 (不全面!)

    5.this

    /* * 1.this是什么东西? * thisdemo.Person@31731334 thisdemo.Person@31731334 this其实就是当前对象的地址值。 谁调用我,我就带表哪个对象。(this是一个动态的对象地址) * * 2.this使用场景 * 用于区分成员变量和局部变量。(重名的时候使用) * this.name --- 代表成员变量 * * 3.this的作用 * 区分局部变量和成员变量 */ public class ThisDemo { public static void main(String[] args) { Person p = new Person(); p.setName("bbaa"); System.err.println("p----》" +p); //打印对象其实就是打印地址值 Person p1 = new Person(); p1.setName("bbaa"); System.err.println("p1---->" + p1); } }

    6.构造方法

    public 类名(){} 举例: class Person { public Person(){} } 构造方法什么时候被调用: 使用new创建对象的时候,构造方法被调用。 Person p = new Person(); 构造方法作用: 能够给对象的属性进行初始化。 构造方法的注意事项: 1.注意: 如果我们不写构造方法,系统默认给我们添加一个无参的构造方法。 如果我们手动的给出一个构造方法,系统不提供默认的无参构造。 2.能够完成成员变量的初始化。 public class TestStu { public static void main(String[] args) { Student stu = new Student(); Student sut1 = new Student("张三",18); // 有参构造能够给对象赋值 } } 练习: 定义一个学生类 在学生类中定义两个属性:身高和姓名 定义两个构造方法 形参分别为:一个空参构造, 一个满参构造 定义一个测试类分别使用两个构造方法 练习: 1定义学生类 name 和age属性 2.提供无参构造 有参构造 set和get方法 3.测试类通过无参构造创建对象,set方法给对象设置属性,get获取属性并打印 4.测试类中通过有参构造创建对象并给对象属性初始化,调用get方法获取属性并打印 /* 定义一个学生类 在学生类中定义两个属性:身高和姓名 定义两个构造方法 形参分别为:一个空参构造, 一个满参构造 定义一个测试类分别使用两个构造方法 */ public class Student { private String name; private int age; //无惨构造 public Student(){} //有参构造 public Student(String name,int height){ this.name = name; this.age = height; } //提供setName public void setName(String name){ this.name = name; } //getName方法 public String getName(){ return name; } //setHeight public void setHeight(int height){ this.age = height; } //getHeight public int getHeight(){ return age; } } /* * 定义一个测试类分别使用两个构造方法 * * 1.通过无惨构造创建对象; 通过set给Student对象设置值,通过get方法获取设置后的值 * * 2.通过有参构造创建对象,并通过有参构造给对象初始化,通过get获取设置后的属性值 */ public class StudentTest { public static void main(String[] args) { //1.通过无惨构造创建对象; 通过set给Student对象设置值,通过get方法获取设置后的值 Student stu = new Student(); stu.setName("八戒"); stu.setHeight(170); System.out.println(stu.getName() + " " + stu.getHeight()); //2.通过有参构造创建对象,并通过有参构造给对象初始化,通过get获取设置后的属性值 Student stu1 = new Student("大湿兄",180); System.out.println(stu1.getName() + " " + stu1.getHeight()); } } 7、返回值和参数均为类名的使用: /* * 数据类型: * 基本数据类型: int 4类8种 * 引用数据类型: int[] 类 接口 * 类---》 JDK写好的类 String Scanner System Random * 自定义类: Person Student Dog * * 1.返回值类型为类名 */ public class Demo1 { public static void main(String[] args) { Person p = new Person(); getTest(p); } // 1.返回值类型为类名 public Person getSum(){ //返回对象 Person p = new Person(); return p; //方法的返回值类型为Person,return 的时候必须return一个Person对象 } //2.参数为类名 //虽然我参数写的是Person类名,但调用方法的时候,必须传入Person对象 public static void getTest(Person p){ System.out.println(p); } }
    转载请注明原文地址: https://ju.6miu.com/read-24553.html

    最新回复(0)