一、什么是面向对象

面向对象和面向过程的异同点:

相同点:都是一种思想,编程思想。

不同点:面向过程------>强调的是功能行为,即注重完成每件事情的每一个步骤;

面向对象-------->强调的是具备了某一功能的对象,把完成某个功能的特定步骤封装起来,然后再调用。

举一个简单而又形象的例子:实现把大象装进冰箱

面向过程的的实现:

第一步:把冰箱门打开

第二步:把大象装进冰箱里

第三步:关上冰箱门

一步一步的来实现即可

面向对象的实现:

分析:有哪些对象? 大象、冰箱。

对象的特点、功能等------------>如冰箱这个对象应该有存储、打开关闭等功能等功能

冰箱.打开();

冰箱.存储(这里是把 大象传进来);

冰箱.关闭();

由此可见:面向对象是把实现的功能封装了然后再去调用即可

类的概念

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语言之面向对象相关推荐

  1. 电大java语言与面向对象程序设计基础_6406Java语言与面向对象程序设计基础A卷...

    6406Java语言与面向对象程序设计基础A卷 试卷编号:6406 座位号 浙江广播电视大学2006年春季学期开放教育专科期末考试 <Java语言与面向对象程序设计基础>试题 2006年7 ...

  2. java语言与面向对象清华大学pdf_清华大学出版社-图书详情-《Java语言与面向对象程序设计》...

    Java是一门简单的.动态的跨平台编程语言,它是面向对象编程的典范,因此更适合面向对象程序设计方法论与实践的入门教学.Java被广泛地应用到各个领域中:高伸缩高可靠的服务器端应用开发.复杂的企业生产运 ...

  3. 黑马程序员——java语言基础——面向对象

    ---------------------- android培训.java培训.期待与您交流! ---------------------- 类就是:对现实生活中事物的描述. 对象:就是这类事物,实实 ...

  4. 第三周《java语言程序设计——面向对象入门》学习总结

    1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词,如类.对象.封装等 答:面向过程编程的关注点是函数,而面向对象编程的关注点是先要有对象,然后调用对象的方法.而所谓对象是状态与行 ...

  5. Java语言基础-面向对象编程三步走之打开冰箱门

    开头: 何谓"面向对象" 面向对象是一种编程思想. 思想是一个很虚无缥缈的东西,但是它可以从一个人的具体行动中体现出来,如果说你坚持每天跑步,每天读书,做一些有益于身心健康的事情, ...

  6. 猫和老鼠面向对象java语言_面向对象葵花宝典- 完整版.pdf

    构架,均衡,负载,网站,应用,net,存储系统,java,设计模式,互联网 面向对象葵花宝典 /yunhua_lee 面向对象葵花宝典 目录 第一部分:面向对象基础6 1.面向对象概述6 1.1. 程 ...

  7. java语言基础-面向对象编程-方法(廖雪峰老师官网学习记录)

    Java是一种面向对象的编程语言. 面向对象编程,英文是Object-Oriented Programming,简称OOP. 面向对象编程,是一种通过对象的方式,把现实世界映射到计算机模型的一种编程方 ...

  8. JAVA语言基础-面向对象(集合框架02List、泛型)

    2019独角兽企业重金招聘Python工程师标准>>> 16.01_集合框架(去除ArrayList中重复字符串元素方式)(掌握) A:案例演示 需求:ArrayList去除集合中字 ...

  9. java中可用于定义成员常量_13秋北航《Java语言与面向对象程序设计》在线作业三辅导 …...

    需要答案的请联系:qq或者微信 514169068 一. 惟一选项(共 15 道试题,共 60 分.)V 1.设有定义 float x=3.5f, y=4.6f, z=5.7f:则以下的表白式中,值为 ...

最新文章

  1. python3-泊松分布
  2. LeetCode 1376. 通知所有员工所需的时间(DFS)
  3. 小学计算机表格制作教学,小学计算机年度教学工作计划表格(四篇).docx
  4. Quartus13.1全编译出现引脚错误(神级bug)
  5. SDUT——打印数字图形
  6. 在ASP.NET的母版页中使用图片和超链接,HTML标记和ASP.NET标记的不同
  7. OpenGL ES总结(二)OpenGL坐标变换之平移及旋转
  8. 项目总结13:Jav文件压缩-InputStream转化为base64-Base64解码并生成图片
  9. 服务器电源常见故障判断及处理方法
  10. Atitit mybatis使用简明教程 目录 1.1. Mybatis.xml 配置文件 1 1.2. Datamp.xml mapper文件主要作用是分模块放sql语句 2 1.3. 查询
  11. 如何在官网上下载MySQL驱动--最新方法
  12. 基于arduino的WiFi无线传输
  13. C语言揭秘二战德军的顶级加解密技术——恩格玛机!
  14. Gitee创建仓库拉人
  15. Java 进口管制限制解除
  16. 完整流程 Flutter 集成 Rust 多语言跨端开发基础案例
  17. 硬件设计-DIY功放
  18. Unity3D 程序最简单的开机启动——创建快捷方式
  19. ORACLE 按照指定的ID 顺序排序
  20. 计算机大写改成拼音形式,Excel将汉字名字,转换为大写的拼音,全称

热门文章

  1. 怎么恢复qq空间删除的日志文件呢
  2. LVGL 7.8.1生成二维码例程
  3. Qt 笔锋 毛笔 钢笔 蜡笔 4k流畅画笔 Demo
  4. 2022年一级建造师考试《市政公用工程》练习题及答案(多选题)
  5. 录音文件下载_录音内容如何导出?对于小白来说是难题,一招教你搞定它
  6. Linux Socket详解 大全 基础知识
  7. 从知识工程到知识图谱全面回顾
  8. Android Bmob
  9. python心率检测
  10. 2012年世界500强排行榜(企业名单)