01. 面向对象的介绍

面向对象是一种编程思想, 面向对象是基于面向过程,从面向过程思想演化过来的。面向过程思想: 在完成功能的时候,我们需要关注里面的每一个细节,每一个步骤, 并且里面的每一个细节每个步骤都要有我们自己亲力亲为,由我们自己去实现。
面向对象思想: 在完成功能的时候,我们只关注结果, 里面的细节,步骤是由别人(对象)帮我们实现的。面向过程事情是自己做, 面向对象事情是别人做。面向对象思想的好处:1. 可以把复杂的事情简单化。2. 更加符合人类思考的习惯。3. 从执行者变成了指挥者。

02. 面向过程和面向对象的举例

面向对象的举例:买电脑面向过程: 上网查参数 -> 走路来到中关村 -> 找到电脑店 -> 讨价还价 -> 买回电脑面向对象: 让班长去买电脑 -> 交给我们洗衣服:面向过程: 脱衣服 -> 找个盆 -> 放点水 -> 泡一泡 -> 搓一搓 -> 拧一拧 -> 凉一凉 -> 收衣服面向对象: 把衣服交给女朋友命令她去洗衣服 -> 把衣服交给我们

03. 类和对象的介绍

04. 学生类的定义

/*这是一个学生类,这个类的作用是用来描述(表示)学生这种事物。属性:姓名,年龄行为:学习,说话在类中属性又被称为成员变量。在类中行为又被称为成员方法。成员变量: 定义在类中方法外的变量。成员方法: 和之前一样,只不过要去掉static关键字, 在描述现实事物的类中定义方法,要去掉static。仅仅定义一个学生类是并没有一个具体的学生被创建出来的, 学生类用来对学生这种事物进行描述(说明), 描述了学生这种事物具有姓名和年龄的属性,具备学习和说话的行为。如果想要创建一个具体的学生,那么需要根据这个类创建对象。*/
public class Student {//定义成员变量,表示姓名属性String name;//定义成员变量,表示年龄属性int age;//定义学习方法,表示学习的行为public void study() {System.out.println("好好学习,天天向上");}//定义说话方法,表示说话的行为public void say() {System.out.println("哈哈哈哈哈,能说话真好");}
}

05. 学生类的使用

/*类的使用步骤类是引用数据类型, 使用步骤和之前的Scanner或者Random是一致的。步骤1. 导包如果两个类在同一个包下,那么可以省略导包的操作。2. 创建对象数据类型 对象名 = new 数据类型();3. 使用成员对象名.成员变量对象名.成员方法()直接输出对象名, 输出的是对象的地址值。对象内的属性是有默认值的,对象属性的默认值和数组元素的默认值一样。整数  -> 0小数  -> 0.0布尔  -> false字符  -> ' '引用  -> null*/
public class Demo01StudentTest {public static void main(String[] args) {//创建对象Student stu = new Student();//输出对象名System.out.println(stu);//获取学生对象的姓名和年龄属性并输出System.out.println(stu.name);   //nullSystem.out.println(stu.age);    //0//给对象的属性重新赋值stu.name = "小苍同学";stu.age = 36;//重新输出对象的属性System.out.println(stu.name);   //小苍同学System.out.println(stu.age);    //36//通过对象调用成员方法stu.study();stu.say();}
}

06.手机类的定义和使用

  • 手机类
/*手机类, 用来描述手机这种事物。属性:品牌, 颜色, 价格行为:打电话, 发短信*/
public class Phone {//品牌String brand;//颜色String color;//价格int price;//打电话public void call(String name) {System.out.println("给" + name + "打电话");}//发短信public void sendMessage() {System.out.println("群发短信");}
}
  • 测试类
/*手机类的测试类。*/
public class Demo02StudentTest {public static void main(String[] args) {//创建Phone对象Phone p = new Phone();System.out.println(p);//输出Phone对象的各个属性System.out.println("品牌:" + p.brand);    //nullSystem.out.println("颜色:" + p.color);    //nullSystem.out.println("价格:" + p.price);    //0//给属性赋值p.brand = "波导";p.color = "黑色";p.price = 998;//输出Phone对象的各个属性System.out.println("品牌:" + p.brand);    //波导System.out.println("颜色:" + p.color);    //黑色System.out.println("价格:" + p.price);    //998//调用Phone的方法p.call("秦始皇");p.sendMessage();}
}

07. 一个对象的内存图

08. 两个对象的内存图

09. 成员变量和局部变量的区别

定义位置不同(记住)局部变量: 定义在方法中。成员变量: 定义在类中方法外。
初始值不同(记住)局部变量: 没有初始值,在使用前必须要赋值。成员变量: 有初始值的,成员变量的初始值和数组元素的初始值一样。
内存位置不同:局部变量: 跟随方法保存在栈内存中。成员变量: 跟随方法保存在堆内存中。
生命周期不同局部变量: 当代码执行完定义变量的代码时就会产生, 离开自己的作用域该变量就会消失成员变量: 在创建对象的时候跟随对象产生, 在对象消失的时候跟随对象消失。

10. private关键字以及get和set方法

学生类

/*学生类属性:姓名,年龄行为:show方法,展示自己的行为,调用show方法后,可以输出自己的姓名和年龄。目前因为可以直接访问到对象的属性,所以可以给对象的属性赋值成任何内容。如果我们不让外界直接访问到这个对象的属性,那么就可以进行限制了。private关键字1. private是一个权限修饰符2. 表示私有,被private修饰的成员只能在本类中访问。3. private可以修饰成员变量,也可以修饰成员方法。如果类中的属性使用private修饰了,那么该属性无法在外界使用了,这样也是不行的,我们要提供一些方式让外界      去使用这个变量。我们可以提供一个方法,让外界给private修饰的属性赋值, 这个方法名叫做setXXX我们还要提供一个方法,让外界获取private修饰的属性值, 这个方法名叫做getXXX*/
public class Student {//姓名String name;//小波老师//年龄private int age;//18//定义方法,用来让外界获取age属性值public int getAge() {return age;}//定义方法,用来让外界给age属性赋值public void setAge(int a) {//使用if进行判断,如果传递过来的年龄是合法的年龄,再赋值if(a > 0 && a <= 200) {age = a;} else {System.out.println("年龄有误");}}//show方法,可以将自己的姓名和年龄输出public void show() {System.out.println("姓名:" + name + ",年龄:" + age);}
}

测试类:

/*学生类的测试类*/
public class Demo01StudentTest {public static void main(String[] args) {//创建学生对象Student stu = new Student();//给学生对象的属性赋值stu.name = "小波老师";stu.setAge(18);//调用对象的show方法,输出姓名年龄stu.show();//单独获取stu的age属性值System.out.println(stu.getAge());}
}

11. 标准的private代码

/*学生类属性:姓名,年龄。 属性要加私有方法:get/setset方法没有返回值,有参数。get方法有返回值,没有参数。*/
public class Student {//定义姓名和年龄属性private String name;private int age;//getName让外界获取name属性的值public String getName() {return name;}//setName 让外界给name属性赋值public void setName(String n) {name = n;}//getAgepublic int getAge() {return age;}//setAgepublic void setAge(int a) {age = a;}
}
/*测试类*/
public class Demo01StudentTest {public static void main(String[] args) {//创建学生对象Student stu = new Student();//给属性赋值stu.setName("小泽老师");stu.setAge(24);//获取属性的值,然后输出System.out.println("姓名:" + stu.getName());System.out.println("年龄:" + stu.getAge());}
}

12. 封装的概述

封装是面向对象三大特征之一, 另外两个分别是继承和多态。
封装指的是隐藏具体的实现,然后提供公共的对外访问方式。目前代码封装的体现:使用private将属性私有(隐藏), 然后提供了get/set(访问方式)封装的好处:1. 提高代码的安全性。2. 可以提高代码的复用性

13. this关键字的作用

  • Student类
/*成员变量和局部变量允许重名。如果局部变量和成员变量同名,那么访问到时局部变量。如果在一个类中局部变量和成员变量同名,那么可以使用this去区分它们。使用this表示的是成员变量,格式:this.变量名this可以解决的问题: 局部变量和成员变量同名的问题。this的含义: this所在的方法是通过哪个对象调用的,this就表示哪个对象(this中真正存放的是对象的地址             值,或者说对象的引用)*/
public class Student {//定义姓名和年龄属性private String name;//"小泷老师"private int age;public String getName() {return name;}public void setName(String name) {//="小泷老师"System.out.println("this:" + this);this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}
  • 测试类
/*学生类的测试类*/
public class Demo01StudentTest {public static void main(String[] args) {//创建Student对象Student stu = new Student();System.out.println("stu:" + stu);//给属性赋值。stu.setName("小泷老师");stu.setAge(30);//输出该属性的值System.out.println("姓名:" + stu.getName() + ", 年龄:" + stu.getAge());}
}

14. 构造方法的介绍

  • Student类
/*构造方法作用: 用来在创建对象的时候给属性赋值。构造方法的格式:public 构造方法名(参数列表) {构造方法体;}1. 构造方法不需要写返回值类型,连void都不用写2. 构造方法名必须和类名一致3. 构造方法不能return任何东西,但是单独写一个return是可以的, return一般省略。构造方法的调用:构造方法是在创建对象的时候自动调用的。new 数据类型(); 这个操作是在创建对象, 此时就会调用构造方法。在创建对象的时候小括号中我们可以传递一些参数, 程序会根据传递的参数调用对应的构造方法。构造方法的注意事项:1. 如果在一个类中我们没有给出构造方法,那么系统会帮我们提供一个空参数的构造方法。2. 如果在一个类中我们给出了构造方法,那么系统就不会帮我们提供这个空参数的构造方法了。3. 构造方法支持重载。*/
public class Student {//提供两个属性(姓名,年龄)private String name; //小明同学private int age; //20//提供show方法,用来输出学生对象的姓名和年龄。public void show() {System.out.println("name:" + name + ", age:" + age);}//提供构造方法,用来在创建对象的时候给属性赋值public Student(String name, int age) {//name="小明同学" age=20this.name = name;this.age = age;}//为了保证以最常用的方式也能创建对象,手动提供一个空参数的构造方法public Student() {}}
  • 测试类
/*构造方法的调用构造方法是在创建对象的时候自动调用的。new 数据类型(参数)*/
public class Demo01StudentTest {public static void main(String[] args) {//创建Student对象, 执行空参数的构造方法//因为创建对象的时候小括号中没有写任何东西,那么使用的就是空参数的构造方法。//Student s1 = new Student();//创建Student对象, 执行一个参数是字符串的构造方法//因为创建对象的时候小括号中写的是一个字符串,所以使用的就是一个参数是字符串的构造方法。//Student s2 = new Student("你好");//Student s3 = new Student();//调用一个参数是int的构造方法//Student s4 = new Student(100);//创建对象,在创建对象的时候直接给属性赋值Student stu = new Student("小明同学", 20);stu.show();}
}

15. 标准的学生类的定义

  • Student类
/*javabean就是Java编写类的规范, 只要一个类符合这些规范,那么这个类就可以称为是一个Javabean。Javabean规范1. 将属性私有。2. 提供get/set方法3. 提供空参数的构造方法(必须),提供有参数的构造方法(选做,现阶段建议做)定义一个学生类,提供姓名和年龄属性, 要求满足Javabean规范。*/
public class Student {//给出姓名和年龄属性private String name;private int age;//提供空参数的构造方法public Student() {}//提供有参数的构造方法public Student(String name, int age) {this.name = name;this.age = age;}//提供get/set方法public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}
  • 测试类
public class Demo01StudentTest {public static void main(String[] args) {//使用空参数构造方法创建Student对象Student stu = new Student();//给stu的属性赋值stu.setName("宝强同学");stu.setAge(25);//输出属性的值System.out.println("姓名:" + stu.getName() + ",年龄:" + stu.getAge());System.out.println("==========================");//使用有参数的构造方法创建Student对象,创建对象的时候直接给属性赋值Student stu2 = new Student("乃亮同学", 40);//stu2.setAge(41);System.out.println("姓名:" + stu2.getName() + ",年龄:" + stu2.getAge());}
}

16. 航班信息

/*航班类属性:航班号,航空公司,起点站,终点站,票价方法:get/set/打印航空信息方法*/
public class Flight {//航班号private String flightNum;//航空公司private String airline;//起点站private String from;//终点站private String to;//票价private int fare;//打印航空信息方法public void print() {System.out.println("航班号:" + flightNum + ",航空公司:" + airline + ",起点站:" + from + ",终点站:" + to + ",票价:" + fare);}public Flight() {}public Flight(String flightNum, String airline, String from, String to, int fare) {this.flightNum = flightNum;this.airline = airline;this.from = from;this.to = to;this.fare = fare;}public String getFlightNum() {return flightNum;}public void setFlightNum(String flightNum) {this.flightNum = flightNum;}public String getAirline() {return airline;}public void setAirline(String airline) {this.airline = airline;}public String getFrom() {return from;}public void setFrom(String from) {this.from = from;}public String getTo() {return to;}public void setTo(String to) {this.to = to;}public int getFare() {return fare;}public void setFare(int fare) {this.fare = fare;}
}
public class Demo01Test {public static void main(String[] args) {//创建航班对象Flight flight = new Flight();//给属性赋值flight.setFlightNum("666");flight.setAirline("航空");flight.setFrom("北京");flight.setTo("火星");flight.setFare(22980);//显示航班信息flight.print();}
}

Java面向对象-详细介绍相关推荐

  1. Java面向对象特征介绍

    面向对象不仅仅在java中有体现,在C++中也有.Java面向对象三大特征 封装和隐藏 继承 多态 1.封装和隐藏 Java中通过将数据声明为private私有,再提供公共(public)的方法,ge ...

  2. Java反射详细介绍

    反射 目录介绍 1.反射概述 1.1 反射概述 1.2 获取class文件对象的三种方式 1.3 反射常用的方法介绍 1.4 反射的定义 1.5 反射的组成 1.6 反射的作用有哪些 2.反射的相关使 ...

  3. 300集java课程详细介绍

    还在为如何学习JAVA技术而迷茫吗? 还在为如何学习Android技术而迷茫吗? java300集大型基础视频课程,现已发布第三季更新至(300)集: 给同学们带来全新的Java300集课程啦!jav ...

  4. JAVA面向对象详细

    文章目录 10 面向对象 1.对象的概念(属性,方法) 2. 类的概念 3. 对象的创建(实例化对象) ※※※对象在内存中的存在形式※※※ 4. 类中的方法(成员方法) 5. 方法的参数传递方式 1. ...

  5. java线程详细介绍

    目录(?)[-] 一扩展javalangThread类 二实现javalangRunnable接口 三Thread和Runnable的区别 四线程状态转换 五线程调度 六常用函数说明 使用方式 为什么 ...

  6. Java技术详细介绍

    Java 是一种广泛使用的面向对象编程语言,它被用于开发各种不同类型的应用程序,包括企业级应用程序.移动应用.Web 应用程序等. Java 由 Sun Microsystems(后被 Oracle ...

  7. 简书 java jvm_详细介绍Java虚拟机(JVM)

    1. JVM生命周期 启动.启动一个Java程序时,一个JVM实例就产生了,任何一个拥有public static void main(String[] args)函数的class都可以作为JVM实例 ...

  8. java BASE64Encoder详细介绍及简单实例

    java  BASE64Encoder详解 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,在发送电子邮件时,服务器认证的用户名和密码需要用Base64编码,附件也需要用Base6 ...

  9. Java线程、Java多线程详细介绍

    目录 一.进程和线程的区别 1.1 进程 1.2 线程 二.并发和并行 2.1 并行 2.2  并发 2.3 监控线程的执行情况 三.创建方式 3.1 继承Thread类 思考:为什么不直接通过对象调 ...

最新文章

  1. Java通过链表实现队列
  2. 怎么批量修改html文件后缀,怎么批量修改文件后缀
  3. 【数学】Floating-Point Hazard
  4. Win32 控件篇(2)
  5. 液晶拼接处理器_创新维OLED拼接屏施工单位操作说明
  6. c语言多位数除法,大数除法 C语言
  7. 在linux系统中使用shc指令,Linux编译安装SHC加密组件
  8. SmartToast
  9. ERP、SCM、CRM的区别和联系
  10. 网银支付 加密解密说明
  11. linux网络音频播放,通过 PulseAudio 实现局域网音乐播放
  12. 论华为云的气质与修养
  13. 机电信息杂志机电信息杂志社机电信息编辑部2022年第13期目录
  14. [存储-测试工具]vdbench文件测试随机IO混合读写配置模板
  15. POJ 1950 Dessert
  16. 一起来学Flutter: 使用Decoration设置背景
  17. 【JMP白皮书下载】 | 可靠性增长之探讨与案例分享
  18. 科目一科目四驾驶理论考试哈语版
  19. 如何利用群控做流量,手机群控引流方法有哪些
  20. java 下载db文件_Java下载文件自定义名称和格式类型

热门文章

  1. CyberWorld的使命、目标和愿景
  2. 2019天下3最新服务器,天下3:2019标准号全民竞技赛【太虚】门派定位解析及入门讲解...
  3. ext2文件系统源代码之super.c
  4. 进程的三种基本状态及转换
  5. HashMap源码分析(超级详细)
  6. Java 结合实例学会使用 静态代理、JDK动态代理、CGLIB动态代理
  7. Kmalloc参数详解
  8. JavaScript快速排序算法
  9. Ubuntu 18.04 安装过程记录
  10. 好的营销软文应该怎么写?高质量软文攻略