黑马学习笔记--JAVA面向对象
来源:互联网 发布:以知开头的成语接龙 编辑:程序博客网 时间:2024/05/22 10:28
面向对象概述
面向对象思想
面向过程思想与面向对象思想:
- 面向过程: 面向过程,其实就是面向着具体的每一个步骤和过程,把每一个步骤和过程完成,然后由这些功能方法相互调用,完成需求。
- 面向对象: 面向对象思想就是不断的创建对象,使用对象,指挥对象做事情。
特点:
- 面向过程: 强调的是过程,所有事情都需要自己完成
- 面向对象:
- 是一种更符合我们思想习惯的思想(懒人思想,我把事情自己不做,交给别人去做)
- 可以将复杂的事情简单化(对使用者来说简单了,对象里面还是很复杂的)
- 将我们从执行者变成了指挥者角色发生了转换
类与对象及其使用
成员变量:
- 就是事物的属性,处于类中,方法外。
成员方法:
- 就是事物的行为,不能用static修饰。
类和对象的概念
- 类: 一组相关属性和行为的集合。
- 对象: 该类事物的具体体现。
对象的内存图:
方法公用内存图:
两个引用指向同一个对象内存图:
成员变量和局部变量的区别:
- A:在类中的位置不同:
- 成员变量:类中,方法外
- 局部变量:方法中或者方法声明上(形式参数)
- B:在内存中的位置不同:
- 成员变量:堆内存
- 局部变量:栈内存
- C:生命周期不同:
- 成员变量:随着对象的创建而存在,随着对象的消失而消失。
- 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失。
- D:初始化值的问题:
- 成员变量:有默认值。
- 局部变量:没有默认值。必须先定义,赋值,最后使用.
面向对象特性之封装
封装与私有关键字
private关键字:
- a:是一个权限修饰符。
- b:可以修饰成员(成员变量和成员方法)
- c:被private修饰的成员只在本类中才能访问
- 针对private修饰的成员变量,我们会相应的提供getXxx()和setXxx()用于获取和设置成员变量的值,方法用public修饰
封装的概述和好处:
- A:封装概述:
- 是面向对象三大特征之一
- 是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改。就像刚才说的年龄。
- B:封装原则:
- 将不需要对外提供的内容都隐藏起来。
- 把属性隐藏,提供公共方法对其访问。
- 成员变量private,提供对应的getXxx()/setXxx()方法
- C:好处:
- 通过方法来控制成员变量的操作,提高了代码的 安全性
- 把代码用方法进行封装,提高了代码的 复用性
this关键字:
- A:this:代表所在类的对象引用方法被哪个对象调用,this就代表那个对象
- B:局部变量和成员变量重名的时候使用
代码案例:
package com.itheima_07;/* * 学生类 * * 起名字我们要求做到见名知意。 * 而我们现在的代码中的n和a就没有做到见名知意,所以我要改进。 * * 如果有局部变量名和成员变量名相同,在局部使用的时候,采用的是就近的原则。 * * 我们有没有办法把局部变量的name赋值给成员变量的name呢? * 有。 * * 什么办法呢? * 用this关键字就可以解决这个问题 * * this:代表所在类的对象引用 * 方法被哪个对象调用,this就代表那个对象 * * 使用场景: * 局部变量隐藏成员变量 */public class Student { private String name; private int age; public void setName(String name) { //"林青霞" //name = name; this.name = name; } public String getName() { return name; } public void setAge(int age) { //age = age; this.age = age; } public int getAge() { return age; }}package com.itheima_07;/* * 学生类的测试类 */public class StudentDemo { public static void main(String[] args) { //创建对象 Student s = new Student(); System.out.println(s.getName()+"---"+s.getAge()); s.setName("林青霞"); s.setAge(28); System.out.println(s.getName()+"---"+s.getAge()); }}
面向对象之构造方法
构造方法: 主要用来给对象的数据进行初始化
构造方法格式:
- a:方法名与类名相同
- b:没有返回值类型,连void都没有
- c:没有具体的返回值
构造方法注意事项与重载:
- 如果你不提供构造方法,系统会给出默认构造方法
- 如果你提供了构造方法,系统将不再提供
- 构造方法也是可以重载的,重载条件和普通方法相同
代码示例:
package com.itheima_08;/* * 构造方法: * 给对象的数据进行初始化 * * 格式: * 方法名和类名相同 * 没有返回值类型,连void都不能写 * 没有具体的返回值 * * 构造方法的注意事项: * A:如果我们没有给出构造方法,系统将会提供一个默认的无参构造方法供我们使用。 * B:如果我们给出了构造方法,系统将不在提供默认的无参构造方法供我们使用。 * 这个时候,如果我们想使用无参构造方法,就必须自己提供。 * 推荐:自己给无参构造方法 * C:构造方法也是可以重载的 * * 成员变量赋值: * A:setXxx()方法 * B:带参构造方法 */public class Student { private String name; private int age; /* public Student() { System.out.println("这是构造方法"); } */ public Student() {} public Student(String name) { this.name = name; } public Student(int age) { this.age = age; } public Student(String name,int age) { this.name = name; this.age = age; } public void show() { System.out.println(name+"---"+age); }}package com.itheima_08;public class StudentDemo { public static void main(String[] args) { //如何调用构造方法呢? //通过new关键字调用 //格式:类名 对象名 = new 构造方法(...); Student s = new Student(); s.show(); //public Student(String name) Student s2 = new Student("林青霞"); s2.show(); //public Student(int age) Student s3 = new Student(28); s3.show(); //public Student(String name,int age) Student s4 = new Student("林青霞",28); s4.show(); }}
类名作为形参和返回值
类名作为方法的形参:
package com.itheima_10;public class Student { public void study() { System.out.println("好好学习,天天向上"); }}package com.itheima_10;public class Teacher { public void test(Student s) {//接收传递过来的Student对象的地址值 s.study(); }}package com.itheima_10;//需求: 调用Teacher的test方法//类名作为形式参数:其实这里需要的是该类对象。public class Test { public static void main(String[] args) { Teacher t = new Teacher(); Student s = new Student(); t.test(s); }}
类名作为返回值:
package com.itheima_11;public class Student { public void study() { System.out.println("好好学习,天天向上"); }}package com.itheima_11;public class Teacher { public Student getStudent() { Student s = new Student(); return s;//返回的是Student对象的地址值 }}package com.itheima_11;//需求: 通过Teacher得到Student对象,然后调用Student类的方法//如果方法的返回值是类名:其实返回的是该类的对象public class Test { public static void main(String[] args) { Teacher t = new Teacher(); Student s = t.getStudent(); s.study(); }}
0 0
- 【黑马程序员】 学习笔记 - Java面向对象
- 黑马学习笔记--JAVA面向对象
- 黑马学习笔记--JAVA面向对象2
- 黑马程序员---Java基础学习笔记(面向对象篇)
- 黑马程序员-学习笔记java基础-面向对象
- 黑马程序员---java学习笔记之面向对象知识点
- 黑马程序员---java学习笔记之面向对象知识点2
- 黑马程序员---java学习笔记之面向对象:继承
- 黑马程序员---java学习笔记之面向对象:接口
- 黑马程序员——学习笔记05.java面向对象
- java面向对象 黑马程序员学习笔记(5)
- 黑马程序员—Java基础学习笔记之面向对象
- 黑马程序员 java编程之面向对象学习笔记
- 黑马程序员 java编程之面向对象学习笔记总结
- 【黑马程序员】Java学习笔记之面向对象基础篇
- 【黑马程序员】Java学习笔记之面向对象高级篇
- 黑马程序员Java学习笔记之一 面向对象知识点汇总
- 黑马程序员_java学习笔记 5.java面向对象特性
- Gson
- 1004. 成绩排名 (20)
- 大事务回滚估算
- USACO Palindromic Squares 回文平方数
- USB虚拟串口实验_STM32F1开发指南_第五十三章——USB学习笔记
- 黑马学习笔记--JAVA面向对象
- PAT-A 1088. Rational Arithmetic (20)
- nginx安装配置
- Android性能优化典范(四)
- 封装QtCore
- 洛谷2607,codevs1919,codevs2820,环套树
- ie快捷键使用
- ViewGroup为什么不会调用onDraw
- 黑马学习笔记--JAVA面向对象2