Java面向对象-详细介绍
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面向对象-详细介绍相关推荐
- Java面向对象特征介绍
面向对象不仅仅在java中有体现,在C++中也有.Java面向对象三大特征 封装和隐藏 继承 多态 1.封装和隐藏 Java中通过将数据声明为private私有,再提供公共(public)的方法,ge ...
- Java反射详细介绍
反射 目录介绍 1.反射概述 1.1 反射概述 1.2 获取class文件对象的三种方式 1.3 反射常用的方法介绍 1.4 反射的定义 1.5 反射的组成 1.6 反射的作用有哪些 2.反射的相关使 ...
- 300集java课程详细介绍
还在为如何学习JAVA技术而迷茫吗? 还在为如何学习Android技术而迷茫吗? java300集大型基础视频课程,现已发布第三季更新至(300)集: 给同学们带来全新的Java300集课程啦!jav ...
- JAVA面向对象详细
文章目录 10 面向对象 1.对象的概念(属性,方法) 2. 类的概念 3. 对象的创建(实例化对象) ※※※对象在内存中的存在形式※※※ 4. 类中的方法(成员方法) 5. 方法的参数传递方式 1. ...
- java线程详细介绍
目录(?)[-] 一扩展javalangThread类 二实现javalangRunnable接口 三Thread和Runnable的区别 四线程状态转换 五线程调度 六常用函数说明 使用方式 为什么 ...
- Java技术详细介绍
Java 是一种广泛使用的面向对象编程语言,它被用于开发各种不同类型的应用程序,包括企业级应用程序.移动应用.Web 应用程序等. Java 由 Sun Microsystems(后被 Oracle ...
- 简书 java jvm_详细介绍Java虚拟机(JVM)
1. JVM生命周期 启动.启动一个Java程序时,一个JVM实例就产生了,任何一个拥有public static void main(String[] args)函数的class都可以作为JVM实例 ...
- java BASE64Encoder详细介绍及简单实例
java BASE64Encoder详解 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,在发送电子邮件时,服务器认证的用户名和密码需要用Base64编码,附件也需要用Base6 ...
- Java线程、Java多线程详细介绍
目录 一.进程和线程的区别 1.1 进程 1.2 线程 二.并发和并行 2.1 并行 2.2 并发 2.3 监控线程的执行情况 三.创建方式 3.1 继承Thread类 思考:为什么不直接通过对象调 ...
最新文章
- Java通过链表实现队列
- 怎么批量修改html文件后缀,怎么批量修改文件后缀
- 【数学】Floating-Point Hazard
- Win32 控件篇(2)
- 液晶拼接处理器_创新维OLED拼接屏施工单位操作说明
- c语言多位数除法,大数除法 C语言
- 在linux系统中使用shc指令,Linux编译安装SHC加密组件
- SmartToast
- ERP、SCM、CRM的区别和联系
- 网银支付 加密解密说明
- linux网络音频播放,通过 PulseAudio 实现局域网音乐播放
- 论华为云的气质与修养
- 机电信息杂志机电信息杂志社机电信息编辑部2022年第13期目录
- [存储-测试工具]vdbench文件测试随机IO混合读写配置模板
- POJ 1950 Dessert
- 一起来学Flutter: 使用Decoration设置背景
- 【JMP白皮书下载】 | 可靠性增长之探讨与案例分享
- 科目一科目四驾驶理论考试哈语版
- 如何利用群控做流量,手机群控引流方法有哪些
- java 下载db文件_Java下载文件自定义名称和格式类型