java语言之面向对象
一、什么是面向对象
面向对象和面向过程的异同点:
相同点:都是一种思想,编程思想。
不同点:面向过程------>强调的是功能行为,即注重完成每件事情的每一个步骤;
面向对象-------->强调的是具备了某一功能的对象,把完成某个功能的特定步骤封装起来,然后再调用。
举一个简单而又形象的例子:实现把大象装进冰箱
面向过程的的实现:
第一步:把冰箱门打开
第二步:把大象装进冰箱里
第三步:关上冰箱门
一步一步的来实现即可
面向对象的实现:
分析:有哪些对象? 大象、冰箱。
对象的特点、功能等------------>如冰箱这个对象应该有存储、打开关闭等功能等功能
冰箱.打开();
冰箱.存储(这里是把 大象传进来);
冰箱.关闭();
由此可见:面向对象是把实现的功能封装了然后再去调用即可
类的概念
java程序中的class:类的意思,每一个class就是一个类,类是一种数据类型而且是引用数据类型
程序中类是用来创建对象的,属于概念模型;然而对象是实实在在的个体,即对象是类的实例。
类与对象就好像设计图纸与产品一样:
类的作用:用来描述和创建对象,类描述的是对象的属性和行为:
属性:事物身上的名词--------------------->对应程序中用变量来表示
行为:事物身上的动词---------------------->对应程序中用方法来表示
java中最基本的单位是类 在类中描述事物时的相关概念如下:
(1).成员:java中在类中方法外定义的变量和各种方法都叫类中的成员
(2).成员变量:在class 即类中方法外定义的变量
(3).局部变量:在方法中、for循环的“()”里以及循环体内定义的变量都是局部变量
(4).变量的作用域:变量从被定义的位置开始,到其所在的花括号"{ }"结束
(5).方法的调用:在同一个类中时格式:方法名(参数列表);
在不同的类中:通过创建某个类的对象来调用该类的方法
举例:例1 创建一个车类
属性:车轮数为4、颜色为红色、价格30万
行为:行驶
class Car//定义了一个车类
{int num;//定义属性double price;String color;public void run()//定义行为{System.out.println("行驶");}
}
class Demo_1
{public static void main(String[] args)//main函数:程序运行的入口{Car car=new Car();//创建Carl类的对象carcar.num=4;//通过对象car访问其属性并进行赋值car.color="红色";car.price=300000.0;System.out.println(car.num+","+car.color+","+car.price);//输出对象car的属性值car.run();//通过对象car调用其方法}
}
二、类的加载和对象的内存分配
java程序在运行时jvm即java虚拟机会把他所管理的内存划分为:
栈、堆、方法区、本地方法区和寄存器这五个区域
在执行上述程序时java虚拟机 (JVM) 先找到程序运行的入口即找到main函数,此时main
函数入栈并且为变量car在栈中开辟内存;与此同时把Demo_1.class 文件加载到方法区。
使用Car创建对象时把Car.class 文件加载到方法区,接着在堆中为对象开辟内存及为成员
变量开辟内存;通过对象car访问属性并进行初始化后 接着打印出属性值;最后通过对象car
调用run()函数 此时run函数要入栈。当执行完run函数时返回到函数调用的位置,此时main函数
执行完毕;最后run函数先出栈然后main函数再出栈。函数出栈立马释放内存;然而堆中的对象
需要等到垃圾回收线程回收。
知识补充:成员变量和局部变量的区别
1.在类中位置不同:成员变量定义类里面,方法的外部;局部变量定义在方法内
2.存储位置:成员变量在堆中开辟内存(成员变量属于对象,对象进堆内存),
局部变量在栈开辟内存(局部变量属于方法,方法进栈内存)。
3.作用范围:局部变量的作用范围从其被定义的位置开始到其所在的花括号结束
成员变量的作用范围是整个类。
4.生命周期不同:成员变量随着对象的创建而存在,随着对象的消失而消失;
局部变量随着方法的调用而存在,随着方法的调用完毕而消失。
5.初始化值:局部变量没有默认初始化值,必须定义,赋值 然后才能用;
成员变量有默认初始化值。
构造函数
什么是构造函数?
构造函数也叫构造器,是用来创建对象并给对象初始化用的。注意:是用来创建对象且只能
用于创建对象。
格式:1.无参构造函数
类名 ( ) { }
2.带参数的构造函数
类名 (参数类型1 参数1, 参数类型2 参数2......,参数类型n 参数n)
{
成员变量(属性)1 = 参数名1;
成员变量(属性)2 = 参数名2;
}
构造函数的特点
(1).函数名和类名相同
(2).没有返回值类型,就连void也不能有。
(3).访问权限修饰符可以省略
(4).没有具体的返回值 即没有return
注意:在创建对象时当自己写了构造方法 那么jvm将不再给你提供无参的构造方法了
如果想要写有参构造,那么无参构造也写上;有参构造只是多了一种对成员变量的赋值方式
带参数的构造函数使用举例:
例1.将上面的例子改为带参数的构造方法的形式
class Car//定义了一个车类
{int num;//定义属性String color;double price;Car(int x,String y,double z){num=x;color=y;price=z;}public void run()//定义行为{System.out.println("行驶");}
}
class Demo_2
{public static void main(String[] args)//main函数:程序运行的入口{Car car=new Car(4,"红色",300000.0);//创建Carl类的对象car并进行初始化System.out.println(car.num+","+car.color+","+car.price);//输出对象car的属性值car.run();//通过对象car调用其方法}
}
例2.创建一个人 (person) 类
属性:年龄、性别、名字
行为:吃饭
并实例化2 个person对象;
class Person//定义了一个Person类
{int age;//定义属性String sex,name;Person(int nianling,String xingbie,String mingzi)//带参数的构造方法{age=nianling;//给属性赋值sex=xingbie;name=mingzi;}public void eat()//行为 eat方法{System.out.println("吃饭");}
}
class Demo_3
{public static void main(String[] args){Person per1=new Person(23,"男","张三");//创建对象System.out.println(per1.age+","+per1.sex+","+per1.name);//输出属性值Person per2=new Person(27,"男","王二");System.out.println(per2.age+","+per2.sex+","+per2.name);}
}
三、封装的体现------------>private关键字
面向对象有三大特点:继承、封装、多态
封装:只对外界提供有用的属性和行为
广义:类和方法定义本身就是封装的体现
关键字:private :私有的-------->称为访问权限修饰符
使用 private 封装类的属性:先将属性定义为private (私有的),再对其属性定义相应的
set方法和get方法
举例:创建一个学生类 Student
属性:年龄、名字
行为:学习
class Student
{private int age;//定义属性并将其私有化private String name;public void setAge(int nianling)//对年龄赋值的setAge方法{if(nianling>40 && nianling<60)System.out.println("不是学生是上班族");else if(nianling<1 || nianling>130)System.out.println("年龄不合法");elseage=nianling;}public int getAge()//获取年龄的 getAge方法{return age;}public void setName(String mingzi){name=mingzi;}public String getName(){return name;}public void study(){System.out.println("学习");}
}
class Demo_4
{public static void main(String[] args){Student stu=new Student();//创建对象stu.setAge(22);//通过对象stu 访问成员函数stu.setName("李欢欢");System.out.println(stu.getAge()+","+stu.getName());}
}
小结:封装的好处
(1).提供公共的访问方式,隐藏了实现细节
(2).提高了代码的安全性
(3).提高了代码的复用性
四、this关键字------------>指向当前对象
this的使用:this是一个引用,总是指向当前对象。
this在构造函数中的作用:当局部变量和成员变量同名时,用于区分成员变量。
class Worker
{private int age;//定义属性并将其私有化private String name;public void setAge(int age)//对年龄赋值的setAge方法{if(age<1 || age>130)System.out.println("年龄不合法");elsethis.age=age;}public int getAge()//获取年龄的 getAge方法{return age;}public void setName(String name){this.name=name;}public String getName(){return name;}public void work(){System.out.println("work");}
}
class Demo_4
{public static void main(String[] args){Worker wor=new Worker();//创建对象wor.setAge(40);//通过对象stu 访问成员函数wor.setName("李四");System.out.println(wor.getAge()+","+wor.getName());wor.work();}
}
本例中如果没有用 this 则输出结果会是 0,null work 这是因为成员变量和局部变量同名,成员变量无效了;所以成员变量根本没有得到初始化。
java语言之面向对象相关推荐
- 电大java语言与面向对象程序设计基础_6406Java语言与面向对象程序设计基础A卷...
6406Java语言与面向对象程序设计基础A卷 试卷编号:6406 座位号 浙江广播电视大学2006年春季学期开放教育专科期末考试 <Java语言与面向对象程序设计基础>试题 2006年7 ...
- java语言与面向对象清华大学pdf_清华大学出版社-图书详情-《Java语言与面向对象程序设计》...
Java是一门简单的.动态的跨平台编程语言,它是面向对象编程的典范,因此更适合面向对象程序设计方法论与实践的入门教学.Java被广泛地应用到各个领域中:高伸缩高可靠的服务器端应用开发.复杂的企业生产运 ...
- 黑马程序员——java语言基础——面向对象
---------------------- android培训.java培训.期待与您交流! ---------------------- 类就是:对现实生活中事物的描述. 对象:就是这类事物,实实 ...
- 第三周《java语言程序设计——面向对象入门》学习总结
1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词,如类.对象.封装等 答:面向过程编程的关注点是函数,而面向对象编程的关注点是先要有对象,然后调用对象的方法.而所谓对象是状态与行 ...
- Java语言基础-面向对象编程三步走之打开冰箱门
开头: 何谓"面向对象" 面向对象是一种编程思想. 思想是一个很虚无缥缈的东西,但是它可以从一个人的具体行动中体现出来,如果说你坚持每天跑步,每天读书,做一些有益于身心健康的事情, ...
- 猫和老鼠面向对象java语言_面向对象葵花宝典- 完整版.pdf
构架,均衡,负载,网站,应用,net,存储系统,java,设计模式,互联网 面向对象葵花宝典 /yunhua_lee 面向对象葵花宝典 目录 第一部分:面向对象基础6 1.面向对象概述6 1.1. 程 ...
- java语言基础-面向对象编程-方法(廖雪峰老师官网学习记录)
Java是一种面向对象的编程语言. 面向对象编程,英文是Object-Oriented Programming,简称OOP. 面向对象编程,是一种通过对象的方式,把现实世界映射到计算机模型的一种编程方 ...
- JAVA语言基础-面向对象(集合框架02List、泛型)
2019独角兽企业重金招聘Python工程师标准>>> 16.01_集合框架(去除ArrayList中重复字符串元素方式)(掌握) A:案例演示 需求:ArrayList去除集合中字 ...
- java中可用于定义成员常量_13秋北航《Java语言与面向对象程序设计》在线作业三辅导 …...
需要答案的请联系:qq或者微信 514169068 一. 惟一选项(共 15 道试题,共 60 分.)V 1.设有定义 float x=3.5f, y=4.6f, z=5.7f:则以下的表白式中,值为 ...
最新文章
- python3-泊松分布
- LeetCode 1376. 通知所有员工所需的时间(DFS)
- 小学计算机表格制作教学,小学计算机年度教学工作计划表格(四篇).docx
- Quartus13.1全编译出现引脚错误(神级bug)
- SDUT——打印数字图形
- 在ASP.NET的母版页中使用图片和超链接,HTML标记和ASP.NET标记的不同
- OpenGL ES总结(二)OpenGL坐标变换之平移及旋转
- 项目总结13:Jav文件压缩-InputStream转化为base64-Base64解码并生成图片
- 服务器电源常见故障判断及处理方法
- Atitit mybatis使用简明教程 目录 1.1. Mybatis.xml 配置文件	1 1.2. Datamp.xml mapper文件主要作用是分模块放sql语句	2 1.3. 查询
- 如何在官网上下载MySQL驱动--最新方法
- 基于arduino的WiFi无线传输
- C语言揭秘二战德军的顶级加解密技术——恩格玛机!
- Gitee创建仓库拉人
- Java 进口管制限制解除
- 完整流程 Flutter 集成 Rust 多语言跨端开发基础案例
- 硬件设计-DIY功放
- Unity3D 程序最简单的开机启动——创建快捷方式
- ORACLE 按照指定的ID 顺序排序
- 计算机大写改成拼音形式,Excel将汉字名字,转换为大写的拼音,全称