一、面向对象的概念

1.什么是面向对象?

  (1)面向对象是一种符合人类思维习惯的编程思想。

  (2)面向对象是一种思考问题的思维方式。

2.三种特性:

  (1)封装性

  (2)继承性

  (3)多态性

3.建立面向对象思维方式:

  (1)先整体,再局部

  (2)先抽象,再具体

  (3)能做什么,再怎么做

4.如何学习面向对象?

  (1)掌握一门面向对象的语法

  (2)熟悉面向对象的设计原则

  (3)熟悉面向对象设计模式

二、类与对象

1.类的定义:

  (1)类是分类、类别

  (2)通过分类,我们可以区别不同的事物种类,在日常生活中,我们常常这样做

  (3)所以,类是一组具有相同特性(属性)与行为(方法)的食物集合。

2.对象的定义

  一个类要想真正的进行操作,且必须依靠对象,对象的定义格式如下:

类名称 对象名称 = new类名称();

2.类与对象的的关系

  (1)类表示一个共性的产物,是一个综合的特征,而对象,是一个个性的产物,是一个个体的特征。

  (2)类由属性和方法构成:

    属性:相当于一个个的特征

    方法:相当于人的一个个的行为,例如:说话、吃饭、唱歌、睡觉

3.类和对象的定义格式

在Java中可以使用以下的语句定义一个类:

class类名称{
属性名称;
返回值类型 方法名称(){}
}

对象的定义格式:

类名称 对象名称 = new类名称();

如果想要访问类中的属性或方法(方法的定义),

则可以依靠以下的语法形式:

访问类中的属性:

对象.属性;

调用类中的方法:

对象.方法();

4.类与对象小结

(1)new关键字:表示向内存申请空间,也表示实例化一个对象,创建一个对象。

(2)一个对象在内存中的大小,由该对象的所有属性所占的内存大小的总和。引用类型变量在32位系统上占4个字节,在64位系统上占8个字节。加上而外的对象隐形数据所占的大小。

(3)相同的类型才可以赋值。

(4)不同的引用,指向同一个对象,任何一个引用改变对象的值,其他引用都会反映出来。

(5)编程时要注意的问题,在确定不使用对象时,要尽早释放对象:引用null

(6)当一个堆中的对象没有被任何引用变量所指向时,该对象会被JVM的GC程序认为是垃圾对象,从而被回收。

三、封装性

1.封装性的概念

  (1)封装性是面向对象思想的三大特征之一。

  (2)封装就是隐藏实现细节,仅对外提供访问接口。

    封装有:属性的封装、方法的封装、类的封装、组件的封装、模块化的封装、系统级封装...

2.封装的好处

(1)模块化

(2)信息隐藏

(3)代码重用

(4)插件化易于调试

(5)具有安全性

3.封装缺点

  会影响执行效率、

4.封装性的体现,需要权限修饰符来配合

(1)Java规定的4种权限(从小到大排列):private、缺省、protected、public

(2)4种权限可以用来修饰类及类的内部结构:属性、方法、构造器、内部类

(3)具体的,4种权限都用来修饰类的内部结构:属性、方法、构造器、内部类

      修饰类的话,只能使用:缺省、public

四、成员变量和局部变量

1.在类中的位置不同

  成员变量:在类中定义

  局部变量:在方法中定义或者方法的参数

2.在内存中的位置不同

  成员变量:在堆内存(成员变量属于对象,对象进堆内存)

  局部变量:在栈内存(局部变量属于方法,方法进栈内存)

3.生命周期不同

  成员变量:随着对象的创建而存在,随着对象的销毁而消失

  局部变量:随着方法的调用而存在,随着方法的调用完毕而消失

4.初始化值不同

  成员变量:有默认初始化值,引用类型默认null

  局部变量:没有默认初始化值,必须定义,赋值,然后才能使用

注意:

  局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。

五、构造方法

1.什么是构造方法:

  (1)构造方法是类构造对象时调用的方法,用于对象的初始化工作

  (2)构造方法是实例化一个类的对象时,也就是new的时候,最先调用的方法。

2.构造方法的定义:

  构造方法是在类中定义的,构造方法的定义格式:方法名称与类名称相同,无返回值类型的声明。

3.对象的实例化语法:

Dog dog = new Dog();//new Dog后面有个括号,带括号表示调用了方法,此时调用的方法就是构造方法了

4.构造方法重载

无参构造方法:

public Dog(){}
//带一个参数的构造方法:
public Dog(String name){
this.name =name;
}

带多个参数的构造方法:

public Dog(String name,int age){
this.name =name;
this.age = age;
}

5.构造方法小结

(1)构造方法名称与类名相同,没有返回值声明(包括void)

(2)构造方法用于初始化数据(属性)

(3)每一个类中都会有一个默认的无参的构造方法

(4)如果类中有有显示的构造方法,那么默认构造方法将无效

(5)构造方法可以有多个,但参数不一样,成为构造方法的重载

(6)在构造方法中调用另一个构造方法,使用this.(),该句代码必须在第一句

(7)构造方法之间的调用,必须要有出口

(8)给对象初始化数据可以使用构造方法或setter方法,通常情况下,两者都会保留

(9)一个好的编程习惯是要保留默认的构造方法。(为了方便一些框架代码使用反射来创建对象)

(10)private Dog(){},构造方法私有化,当我们的需求是为了保证该类只有一个对象时。

  什么时候一个类只需要一个对象?比如,工具类(没有属性的类,只有行为)并且该工具对象被频繁使用。权衡只用一个 对象产生多个对象的内存使用,来确定该类是否要定义为只需要一个对象。

Java基础--面向对象(上)的更多相关文章

  1. java基础面向对象之类与对象

    java基础面向对象之类与对象 2017-01-14 1.面向对象的基本概念 以一种组建化的形式进行代码设计 1)在面向对象程序设计中包含有如下几种特性 •封装性:保护内部结构的安全性 •继承性:在已 ...

  2. Java基础-面向对象第一特性之封装(Encapsulation)

    Java基础-面向对象第一特性之封装(Encapsulation) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.理解什么是面向过程和面向对象 面向过程与面向对象都是我们编程中 ...

  3. Java基础 (上)

    基础概念与常识 Java 语言有哪些特点? 简单易学: 面向对象(封装,继承,多态): 平台无关性( Java 虚拟机实现平台无关性): 支持多线程( C++ 语言没有内置的多线程机制,因此必须调用操 ...

  4. 第二十七节:Java基础面向对象-静态,单例模式,继承详情知识点

    前言 Java基础面向对象-静态,单例模式,继承详情知识点.静态-static关键字,static变量,静态代码块,代码块(不加静态),对象创建过程,单例模式,继承. 静态-static关键字 // ...

  5. Java基础-面向对象第三大特性之多态(polymorphism )

    Java基础-面向对象第三大特性之多态(polymorphism) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.多态概述 多态是继封装,继承之后,面向对象的第三大特性,多态的 ...

  6. Java基础-面向对象第二特征之继承(Inheritance)

    Java基础-面向对象第二特征之继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承的概述 在现实生活中,继承一般指的是子女继承父辈的财产.在程序 ...

  7. 黑马程序员----java基础笔记上(毕向东)

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 笔记一共记录了毕向东的java基础的25天课程,分上.中.下 本片为上篇,涵盖前10天课程 1. ...

  8. JAVA(一)JAVA基础/面向对象基础/高级面向对象

    成鹏致远 | lcw.cnblog.com |2014-01-23 JAVA基础 1.开发环境搭建 JAVA程序的执行流程 JAVA命令->要使用一个*.class文件(类文件)->通过c ...

  9. Java基础——面向对象

    Hello 大家好,我又来啦,今天我们来说说Java的面向对象. 还记得之前去面试几家公司的实习生职位,大部分面试官都问过我有关面向对象 的问题,不知道以后还会不会问,估计是不会了吧...(:3[▓▓ ...

  10. Java编程基础-面向对象(上)

    一.面向对象的概念 1.概念:面向对象是把解决的问题按照一定规则划分为多个独立的对象,然后通过调用对象的方法来解决问题.当然,一个应用程序会包含多个对象,通过多个对象的相互配合来实现应用程序的功能.这 ...

随机推荐

  1. VerificationCodeService

    package me.zhengjie.system.domain; import lombok.AllArgsConstructor; import lombok.Data; import lomb ...

  2. 吴裕雄--天生自然python机器学习:机器学习简介

    除却一些无关紧要的情况,人们很难直接从原始数据本身获得所需信息.例如 ,对于垃圾邮 件的检测,侦测一个单词是否存在并没有太大的作用,然而当某几个特定单词同时出现时,再辅 以考察邮件长度及其他因素,人们 ...

  3. 一个简单的jQuery回调函数例子

    jQuery回调函数简单使用 比如说,我们想要点击某个按钮后触发事件, 先把一些指定内容给隐藏掉, 然后跳出相关信息的对话框. 如果使用普通的方法, 不用回调函数的话, 会有怎么样的效果呢? 效果是先 ...

  4. RHEL安装神器EPEL

    什么是EPEL? EPEL的全称叫 Extra Packages for Enterprise Linux .EPEL是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS.Scie ...

  5. 在SpringBoot中使用Junit测试

    一:加入依赖 <dependency> <groupId>junit</groupId> <artifactId>junit</artifactI ...

  6. python调用存储过程失败返回1787错误

    (1787, 'When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP T ...

  7. StartDT AI Lab | 视觉智能引擎——Re-ID赋能线下场景顾客数字化

    人货场的思路是整个新零售数字化链路的核心,人是整个业务生命周期的起始点,图像算法的首要目标就是从图像中得到“人” .前一篇我们主要讲了Face ID的发展,Face ID帮助商家赋能了线下用户画像,把 ...

  8. 吴裕雄--天生自然python学习笔记:python用 Selenium 组件实现浏览器操作自动化

    一般情况下,我们都是用手工操作的方式来对浏览器进行各种操作 . 实际上, 只要我们安装一个自动化操作组件, Python 就可以让我们的很多操作实现自动化 . Selenium 组件 在开发网页时,用 ...

  9. 柱状图dataLabels 文字格式 以及如何获取柱子的name(名称)属性

    dataLabels: { formatter:funnctin(){ return this.percentage //只在堆叠图或饼图中有效,是该点相对总值的百分比. this.point //数 ...

  10. Android7.0 USBCamera设备/dev/video0无读权限

    Android7.0的系统,具备root权限,执行 # adb shell # su # chmod 777 /dev/video0 在5.0的系统中可以预览图像,7.0返回无读权限 File fil ...