Java面向对象编程(一)
目录
一、面向过程与面向对象
面向对象的三大特征
面向对象的思想概述
二、Java语言中的基本元素:类和对象
面向对象中类和对象的理解及二者的关系
类
类及类的成员
类的语法格式
创建Java自定义类
类的访问机制
对象
对象的创建和使用
内存解析
匿名对象
如何理解万事万物皆对象
类的成员之一:属性(Field)
语法格式
变量的分类:成员变量和局部变量
成员变量(属性)和局部变量的区别
对象属性的默认初始化赋值
类的成员之二:方法(Method)
什么是方法
方法的声明格式
方法的分类:按照是否有形参及返回值
方法的调用
练习
一、面向过程与面向对象
面向过程与面向对象都是一种思想,面向对象是相对于面向过程而言的。面向过程,强点的是功能行为,以函数为最小单位,考虑怎么做。面向对象,将功能封装进对象,强调了具备功能的对象,以类/对象作为最小单位,考虑谁来做。
面向对象更加强调运用人类在日常生活中的逻辑中采取的方法与原则,如抽象、分类、继承、聚合、多态等。
面向对象的三大特征
封装
继承
多态
面向对象的思想概述
面向对象分析问题的思路和步骤:
1、根据问题需要,选择问题所针对的现实世界中的实体。
2、从实体中寻找解决问题相关的属性和功能,这些属性和功能就形成了概念世界中的类。
3、把抽象的实体用计算机语言进行描述,形成计算机世界中的类的定义。即借助某种程序语言,吧类构造成计算机能识别和处理的数据结构。
4、将类实例化成计算机世界中的对象。对象是计算机世界中解决问题的最终工具。
二、Java语言中的基本元素:类和对象
面向对象中类和对象的理解及二者的关系
类和对象是面向对象的核心概念。
类是对一类事物的描述,是抽象的,是概念上的内容;
对象是具体存在的该类事物的每个个体,在内存中占据了一定的空间。(实例)
对象是类由派生出来的。
可以理解为:类:抽象概念的人;对象:实实在在的某个人
面向对象的设计重点就是面向类的设计,而对类的设计,其实就是对类的成员的设计。
类
类及类的成员
常见的类的成员有:
属性:对应类中的成员变量;
行为:对应类中的成员方法;
类的语法格式
修饰符 class 类名{
属性声明;
方法声明;
}
说明:
1、修饰符public:类可以被任意访问;
2、类的正文要用{}括起来
创建Java自定义类
步骤:
1、定义类(卡考虑修饰符、类名)
2、编写类的属性(考虑修饰符、属性类型、属性名、初始化值)
特别:类的属性有默认初始化值
3、编写类的方法(考虑修饰符、返回值类型、方法名、形参等)
类的访问机制
在一个类中的访问机制:类中的方法可以直接访问类中的成员变量。(例外:static方法访问非static,编译不通过)
在不同类中的访问机制:先创建要访问类的对象,再用对象访问类中的成员。
对象
对象的创建和使用
java类的实例化,即创建类的对象。
创建对象的语法:类名 对象名=new 类名();
使用“类名.对象成员”的方式访问对象成员(包括属性和方法) (非static类)
public class OOPTest001 {public static void main(String[] args) {//创建对象Person light =new Person();//调用属性:对象名.属性名light.age=20;zss.name="light";//调用方法:对象名.方法名light.canSay();}
}//创建类
class Person{//属性int age;String name;boolean isMale;//方法public void canSay() {System.out.println("i can say!");}}
内存解析
堆:此内存区域中唯一目的就是存放对象实例(new出来的对象),几乎所有的对象实例都在这里分配内存。这一点在java虚拟机对的描述是:所有的对象实例以及数组都要在堆上分配内存。
对象的属性(非static)加载到堆空间中。
栈:通常所说的栈,是指虚拟机栈。虚拟机栈用于存储局部变量等。局部变量表存放了编译期可知长度的各种基本数据类型(Boolean、char、byte、short、int、long、float、Double)、对象引用(reference类型,它不等同于对象本身,是对象在堆内存的首地址)。方法执行完,自动释放。
方法区:用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
说明:
1、java编译完源程序后,生成一个或多个字节码文件,我们使用JVM的类的加载器和解释器对生成的字节码文件进行编译解释(此处涉及到内存解析)。
2、引用类型的变量只可能存两类值:null或地址值(含变量类型)
匿名对象
我们也可以不定义对象的句柄,而直接调用这个对象的方法。即创建的对象,没有显式的赋给一个变量名,这样的对象叫做匿名对象
eg: new Person().shout();
使用情况:
1、如果对一个对象只需要进行以此方法调用,那么就可以使用这个匿名对象。
2、通常将匿名对象作为实参传递给一个方法调用。
说明:当匿名对象作为一个实参传递给一个方法调用时,该方法所接受这个对象的形参可以被多次调用
3、匿名对象只能调用一次。
如何理解万事万物皆对象
1、在java语言中,我们都将功能、结构等封装到类中,通过类的实例化,来调用具体的功能结构
2、涉及到java语言与前端HTML、后端数据库中,前后端的结构在java层面交互时都体现为类、对象。
类的成员之一:属性(Field)
语法格式
修饰符 数据类型 属性名 = 初始化值;
说明1:修饰符
1、常用的修饰符有:private、缺省、protected。public
2、其他修饰符:static、final
说明2:数据类型
任何基本数据类型或引用数据类型
说明3:属性名
属于标识符,符合命名规则和规范即可
变量的分类:成员变量和局部变量
在方法以外,类体内声明的变量称为成员变量
在方法体内部声明的变量称为局部变量(方法形参、代码块内、构造器内、构造器形参)
成员变量(属性)和局部变量的区别
不同:
成员变量 | 局部变量 | |
---|---|---|
声明的位置 | 直接声明在类中 | 方法形参或内部、代码块内。构造器内 |
修饰符 | private、public、static、final等 | 不能使用权限修饰符,可以用final修饰 |
初始化值 | 有默认初始化值 | 没有默认初始化值,必须显式赋值 |
内存加载位置 | 堆空间或静态域内 | 栈空间 |
说明:
1、修饰符:体现结构被调用时可见性大小;可以在声明属性时使用权限修饰符指明其权限;
2、初始化值:形参在调用时赋值即可
相同
1、定义变量格式相同:数据类型 变量名=变量值;
2、先声明,后使用
3、都有其对应的作用域
对象属性的默认初始化赋值
当一个对象被创建时,会对其中各种类型的成员变量自动进行初始化赋值。除了基本数据类型之外的变量类型都是引用类型。
成员变量类型 | 初始值 |
---|---|
btye | 0 |
short | 0 |
int | 0 |
long | 0L |
float | 0.0F |
double | 0.0 |
char | 0或写为‘\u0000’(表现为空) |
bollean | false |
引用类型 | null |
类的成员之二:方法(Method)
什么是方法
方法是类或对象行为特征的抽象,用来完成某个功能的操作。在某些语言中也称作函数或过程。
将功能封装为方法的目的是,可以实现代码的重用,简化代码。
java里的方法不能独立存在,所有的方法必须定义在类里。
方法的声明格式
修饰符 返回值类型 方法名(参数类型 形参1,参数类型 形参2...){
方法体程序代码
return 返回值;
}
其中:
修饰符: public,缺省,private,protected等
返回值类型:
没有返回值:void
有返回值:声明返回值类型。与方法体中“return 返回值”搭配使用
说明:return后不可声明语句
方法名:属于标识符,命名时遵循标识符的命名规则和规范,“见名知意”
形参列表:可以包含0个,一个或多个参数。多个参数时,中间用“,”隔开
返回值:方法在执行完毕后返还给调用他的程序的数据
如何理解方法返回值为void的情况?
可以不用return,但是如果使用,则只能是“return;”表示结束此方法的意思。
方法的分类:按照是否有形参及返回值
无返回值 | 有返回值 | |
---|---|---|
无形参 | void 方法名(){} | 返回值类型 方法名(){} |
有形参 | void 方法名(形参列表){} | 返回值类型 方法名(形参列表){} |
方法的调用
方法通过方法名被调用,且只有被调用时才会执行
方法调用的分析过程
注意:
1、方法被调用一次,就会执行一次
2、没有具体返回值的情况,返回值类型用关键字void表示,那么方法体中可以不必使用return语句,如果使用,仅用来结束方法。
3、定义方法时,方法的结果应该返回给调用者,交由调用者处理。
4、方法中只能调用方法或属性,不可以在方法内部定义方法
练习
1.创建一个Person类,其定义如下:
要求:(1)创建Person类的对象,设置该对象的name、 age和sex属性,调用study方法,输出字符串 “studying”,调用showAge()方法显示age值,调用 addAge()方法给对象的age属性值增加2岁。
public class OOPTest002 {public static void main(String[] args) {Person per1=new Person1();per1.age=18;per1.study();per1.showAge();int tureage=per1.addAge(2);System.out.println("tureage= "+tureage);System.out.println("age: "+per1.age);}}class Person{String name="zss";int age;int sex=1;public void study() {System.out.println("studying"); }public void showAge() {System.out.println("age: "+age); }public int addAge(int i) {age+=i;return age;}
}
运行结果如下:
2、对象数组题目:
定义类Student,包含三个属性:学号number(int),年级state(int),成绩 score(int)。 创建20个学生对象,学号为1到20,年级和成绩都由随机数确定。
问题一:打印出3年级(state值为3)的学生信息。
问题二:使用冒泡排序按学生成绩排序,并遍历所有学生信息 提示: 1) 生成随机数:Math.random(),返回值类型double; 2) 四舍五入取整:Math.round(double d),返回值类型long。
一、二问合并代码如下:
public class OOPTest004 {public static void main(String[] args) {//声明Student类型的数组Student[] stu=new Student[20];for(int i=0;i<stu.length;i++) {//创建stu[i]对象stu[i]=new Student();stu[i].number=i+1;//年级1-6年级stu[i].state=(int)(Math.random()*(6-1+1)+1);//成绩0-100stu[i].score=(int)(Math.random()*(100-0+1)+0);}for(int i=0;i<stu.length;i++) {System.out.println("学号为"+stu[i].number+ "的学生年级为"+stu[i].state+"成绩为"+stu[i].score);}System.out.println("**************************");for(int i=0;i<stu.length;i++) {if(stu[i].state==3) {System.out.println("state=3的学生学号为"+stu[i].number+" 的成绩为 "+stu[i].score);}}System.out.println("**************************");//以下冒泡排序for(int i=0;i<stu.length-1;i++) {for(int j=0;j<stu.length-1-i;j++) {if(stu[j].score>stu[j+1].score) {//如果要换顺序,交换的是对象Student temp=stu[j];stu[j]=stu[j+1];stu[j+1]=temp;}}}for(int i=0;i<stu.length;i++) {System.out.println("学号为"+stu[i].number+ "的学生年级为"+stu[i].state+"成绩为"+stu[i].score);}}
}class Student{int number; //学号int state; //年级int score; //分数
}
运行结果为:
随机生成的学生信息
打印出3年级(state值为3)的学生信息。
按照成绩进行冒泡排序
Java面向对象编程(一)相关推荐
- java面向对象编程知识点总结
一:今天完成 上午详细了解了java面向对象编程的一些细节,记录如下. 1)类 是一种引用类型,包含一个签名和一个主体,主体是放在花括号里面的成员,成员包括字段和方法,还有构造方法.初始化程序和嵌套类 ...
- Java面向对象编程篇6——注解与反射
Java面向对象编程篇6--注解与反射 1.注解概述 Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制 Java 语言中的类.方法.变量.参数和包等都可 ...
- Java面向对象编程篇5——枚举
Java面向对象编程篇5--枚举 1.枚举的概念 在日常生活中这些事物的取值只有明确的几个固定值,此时描述这些事 物的所有值都可以一一列举出来,而这个列举出来的类型就叫做枚举类型 2.枚举的定义 使用 ...
- Java面向对象编程篇4——内部类
Java面向对象编程篇4--内部类 1.内部类的概念 当一个类的定义出现在另外一个类的类体中时,那么这个类叫做内部类 (Inner),而这个内部类所在的类叫做外部类(Outer). 类中的内容:成员变 ...
- Java面向对象编程篇3——接口与抽象类
Java面向对象编程篇3--接口与抽象类 1.接口(interface) 接口中可以含有变量和方法.但是要注意,接口中的变量会被隐式地指定为public static final变量(并且只能是pub ...
- Java面向对象编程篇2——面向对象三大特点
Java面向对象编程篇2--面向对象三大特点 1.封装 1.1.封装的概念 通常情况下可以在测试类给成员变量赋值一些合法但不合理的数值,无 论是编译阶段还是运行阶段都不会报错或者给出提示,此时与现实生 ...
- Java面向对象编程篇1——类与对象
Java面向对象编程篇1--类与对象 1.面向过程 1.1.概念 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了 1.2.优缺点 优点:性 ...
- 【Java】《Java面向对象编程的三大特性》阅读笔记
前言 偶然读到这篇文章(<Java面向对象编程的三大特性>),想来这也算论文?这种还不满网络都是?读罢觉得写得还真不错,这里以我愚见,简单点评一二,不足之处还望指教. 阅读笔记 笔记1 文 ...
- java面向对象编程 漫画_Java面向对象编程(一)
由于常常将Java和C++面向对象编程的原则搞乱,所以这次把相关要点分别总结一下,本文主要总结Java面向对象编程. 面向对象编程的三大特性是:继承性(inheritance), 多态性(polymo ...
- Java面向对象编程入门练习:Manager类继承Employee类并实现求得员工平均业绩
Java面向对象编程入门练习:Manager类继承Employee类并实现求得员工平均业绩 请定义一个Manager类,该类继承Employee类,并定义两个变量及一个构造方法,两个变量:depart ...
最新文章
- NYOJ 12 喷水装置(二)
- python3.6.5安装教程-Centos7 安装Python3.6.
- thinkphp 第二节
- hadoop Mapreduce组件介绍
- 10个最佳jQuery Lightbox效果插件收集
- 接收请求参数及数据回显 2021-04-26
- Cgroup资源配置方法详细解析
- 将两张图片合并成一个PDF,不收费
- 4选1数据选择器程序及testbench文件,给出仿真波形,分析
- H5编辑器H5-Dooring2.30更新指南
- vscode代码自动保存插件_VSCode 云同步扩展设置 Settings Sync 插件
- hive sql union all的性能优化
- 如何提升程序员的代码编写能力
- 设计模式:(状态模式)
- js:开启弹窗和关闭弹窗
- Python黑科技:暴力破解你的密码
- 2021-06-16 STM32F103 EXTI 中断识别 使用固件库
- 【机器人识别抓取】基于视觉的机器人抓取——从物体定位、物体姿态估计到平行抓取器抓取估计
- 关于文件乱码解决方法(英文正常,而中午错误)
- wps怎么将图片嵌入文字里_在WPS文字中如何给图片添加题注(图注)
热门文章
- uc/GUI 汉字显示
- person re-identification by deep learning multi-scale representations(阅读笔记)
- 天使汇是一个可以帮助初创企业迅速找到天使投资
- C++布隆过滤器和哈西切分
- 【系统分析师之路】第十九章 知识产权与标准化(章节重点)
- 1688首页轮播图完整代码
- 计算机excel二级试题及答案,(新)计算机(Excel表格处理)二级考试试题及答案.docx...
- 软件版本和实际有出入导致的后果_软件缺陷导致严重后果的典型案例
- stm32f030无感foc方案,资料包括原理图,pcb,源程序
- CAN总线开发一本全(1)- CAN总线发展历史