大数据之路day05_1--初识类、对象
1.1 什么是面向对象
面向对象思想就是不断的创建对象(属性与行为的封装,让二者作为整体参与程序执行),使用对象,指挥对象做事情。(在已有对象的情况下,直接使用对象,而不再去考虑对象的内部构造)
面向对象的开发来讲也分为三个过程:OOA(面向对象分析)、OOD(面向对象设计)、OOP(面向对象编程)
1.2 了解对象的内部结构
1.2.1 成员变量和成员方法
成员变量:访问修饰符修饰符(作用范围) 类型(存储结构) 属性名称(引用)=初始值(实际物理值);
访问修饰符:可以使用四种不同的访问修饰符中的一种,包括public(公共的),protected(受保护的),无修饰符和 private(私有的)。public 访问修饰符表示属性可以从任何其它代码调用。private 表示属性只可以由该类中的其它方法来调用。
修饰符:是对属性特性的描述,例如:static、final 等等。
类型:属性的数据类型,可以是任意的类型。
属性名称:任何合法标识符
初始值:赋值给属性的初始值。如果不设置,那么会自动进行初始化,基本类型使用缺省值,对象类型自动初始化为 null。
成员变量有两种:一种是被static关键字修饰的变量,叫类变量或者静态变量(在类加载时初始化);另一种没有static修饰,为实例变量(在对象创建时初始化)。
二者在程序运行时的区别,实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了(直接在方法区读取数据)。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用
成员方法:访问修饰符 修饰符 返回值类型 方法名称 (参数列表) throws 异常列表 {方法体}
修饰符:是对方法特性的描述,例如:static、final、abstract、synchronized 等等。
返回值类型:表示方法返回值的类型。如果方法不返回任何值,它必须声明为 void(空)。 Java 技术对返回值是很严格的,例如,如果声明某方法返回一个int值,那么方法必 须从所有可能的返回路径中返回一个int值(只能在等待返回该 int 值的上下文中被调用。)
方法名称:可以是任何合法标识符,并带有用已经使用的名称为基础的某些限制 条件。
参数列表:允许将参数值传递到方法中。列举的元素由逗号分开,而每一个元素包含一个类型和一个标识符。
throws 异常列表:子句导致一个运行时错误(异常)被报告到调用的方法中,以便以合适的方式处理它。异常在后面的课程中介绍。
花括号内是方法体,即方法的具体语句序列。
和变量一样分为实例方法和静态方法
1.2.2 构造方法
目的:主要用来给对象的数据进行初始化
格式:访问修饰符类名() { }
1.2.3 代码块
1、局部代码块
在局部代码块(方法体)中定义的变量属于局部变量,随方法的调用创建,随方法的出栈而消失
2、构造代码块
优先于构造方法执行(等同于将其放置在构造方法体中的首行),随构造方法执行而执行
3、静态代码块
只随类的加载而加载,无论创建多少次对象,只执行一次。
创建对象时代码执行顺序:
静态代码块(父类到子类)--构造代码块(父类)--构造方法(父类)--构造代码块(子类)--构造方法(子类)--方法(自然顺序)
1.2.4 访问修饰符
public package(default) protected private
本类 √ √ √ √
子类 √ √ √
同包 √ √
全局 √
1.2.5 this和supper
this:本类对象的引用,本类对象的构造器
supper:父类对象的引用,父类对象的构造器
1.2.6 重写(覆盖)和重载
重写:等同于对重写对象方法(非静态方法)的引用,修饰符,返回类型,方法名和参数一样
重载:等同定义新的方法,只不过方法名和原来一样,但参数必须不一样(参数位置无关)
1.3 面对对象的特性
1.3.1 封装
隐藏不需要对外公开的属性和方法,以减少对外耦合(通常将成员变量private,提供对应的getXxx()/setXxx()方法)
而外部只能通过方法来控制成员变量的操作,可提高了代码的安全性;同时把代码用方法进行封装,提高了代码的复用性
1.3.2 继承
多个类有共同的成员变量和成员方法,抽取到另外一个类中(父类),在让多个类去继承这个父类
特点:
1.子类继承父类的成员变量
当子类继承了某个类之后,便可以使用父类中的成员变量,但是并不是完全继承父类的所有成员变量。具体的原则如下:
1)能够访问父类的public和protected成员变量;不能够访问父类的private成员变量(可以通过反射强制获取);
2)对于父类的包访问权限成员变量,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;
3)对于子类可以继承的父类成员变量,如果在子类中出现了同名称的成员变量,则会发生隐藏现象,即子类的成员变量会屏蔽掉父类的同名成员变量。如果要在子类中访问父类中同名成员变量,需要使用super关键字来进行引用。
2.子类继承父类的方法
1)能够访问父类的public和protected成员方法;不能够访问父类的private成员方法(但是能继承);
2)对于父类的包访问权限成员方法,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;
3)对于子类可以继承的父类成员方法,如果在子类中出现了同名称的成员方法,则称为覆盖,即子类的成员方法会覆盖掉父类的同名成员方法(但是父类的成员方法如果是静态,子类也必须是静态才能屏蔽,不然编译错误,反之亦然)。如果要在子类中访问父类中同名成员方法,需要使用super关键字来进行引用。
注意:隐藏和覆盖是不同的。隐藏是针对成员变量和静态方法的,而覆盖是针对普通方法的。
3.构造器
子类是不能够继承父类的构造器,但是要注意的是,如果父类是有参构造,那么子类必须有同类型参数构造,如果父类是无参构造,那么子类任意构造都可。
1.3.3 多态
父类的引用指向子类对象:父类类型 引用名称= new 子类类型
父类类型 引用名称= (父类类型 引用名称)new 子类类型
A:多态成员变量
当子父类中出现同名的成员变量时,多态调用该变量时:
编译时期:参考的是引用型变量所属的类中是否有被调用的成员变量。没有,编译失败。
运行时期:也是调用引用型变量所属的类中的成员变量。
简单记:编译和运行都参考等号的左边。
B:多态成员方法
编译时期:参考引用变量所属的类,如果没有类中没有调用的方法,编译失败。
运行时期:参考引用变量所指的对象所属的类,并运行对象所属类中的成员方法。
简而言之:编译看左边(父类是否拥有该方法),运行看右边(静态都看左边)
大数据之路day05_1--初识类、对象的更多相关文章
- Java,面试题,简历,Linux,大数据,常用开发工具类,API文档,电子书,各种思维导图资源,百度网盘资源,BBS论坛系统 ERP管理系统 OA办公自动化管理系统 车辆管理系统 各种后台管理系统
Java,面试题,简历,Linux,大数据,常用开发工具类,API文档,电子书,各种思维导图资源,百度网盘资源BBS论坛系统 ERP管理系统 OA办公自动化管理系统 车辆管理系统 家庭理财系统 各种后 ...
- 大数据之路week04--day06(I/O流阶段一 之异常)
从这节开始,进入对I/O流的系统学习,I/O流在往后大数据的学习道路上尤为重要!!!极为重要,必须要提起重视,它与集合,多线程,网络编程,可以说在往后学习或者是工作上,起到一个基石的作用,没了地基,房 ...
- 胖子哥的大数据之路(9)-数据仓库金融行业数据逻辑模型FS-LDM
引言: 大数据不是海市蜃楼,万丈高楼平地起只是意淫,大数据发展还要从点滴做起,基于大数据构建国家级.行业级数据中心的项目会越来越多,大数据只是技术,而非解决方案,同样面临数据组织模式,数据逻辑模式的问 ...
- 胖子哥的大数据之路(6)- NoSQL生态圈全景介绍
引言: NoSQL高级培训课程的基础理论篇的部分课件,是从一本英文原著中做的摘选,中文部分参考自互联网.给大家分享. 正文: The NoSQL Ecosystem 目录 The NoSQL Eco ...
- 大数据之路week01--自学之集合_1(Collection)
经过我个人的调查,发现,在今后的大数据道路上,集合.线程.网络编程变得尤为重要,为什么? 因为大数据大数据,我们必然要对数据进行处理,而这些数据往往是以集合形式存放,掌握对集合的操作非常重要. 在学习 ...
- 大数据之路week07--day03(Hadoop深入理解,JAVA代码编写WordCount程序,以及扩展升级)
什么是MapReduce 你想数出一摞牌中有多少张黑桃.直观方式是一张一张检查并且数出有多少张是黑桃. MapReduce方法则是: 1.给在座的所有玩家中分配这摞牌 2.让每个玩家数自己手中的牌有几 ...
- 大数据之路week04--day03(网络编程)
哎,怎么感觉自己变得懒了起来,更新博客的频率变得慢了起来,可能是因为最近得知识开始变得杂变得难了起来,之前在上课的时候,也没有好好听这一方面的知识,所以,现在可以说是在学的新的知识,要先去把新的知识思 ...
- 大数据之路week03--day05(线程 I)
真的,身体这个东西一定要爱护好,难受的时候电脑都不想去碰,尤其是胃和肾... 这两天耽误了太多时间,今天好转了立刻学习,即刻不能耽误!. 话不多说,说正事: 1.多线程(理解) (1)多线程:一个应用 ...
- C#码农的大数据之路 - 使用C#编写MR作业
系列目录 写在前面 从Hadoop出现至今,大数据几乎就是Java平台专属一般.虽然Hadoop或Spark也提供了接口可以与其他语言一起使用,但作为基于JVM运行的框架,Java系语言有着天生优势. ...
随机推荐
- HashMap的结构以及核心源码分析
摘要 对于Java开发人员来说,能够熟练地掌握java的集合类是必须的,本节想要跟大家共同学习一下JDK1.8中HashMap的底层实现与源码分析.HashMap是开发中使用频率最高的用于映射(键值对 ...
- python程序编译成exe文件
最近越来越喜欢使用python写工具.使用的时候,发现程序内部成员python安装目录常常不同,如果用bat双击执行,常常需要修改从svn上down下来的bat文件中python.exe的路径.而给策 ...
- Java描述设计模式(15):责任链模式
本文源码:GitHub·点这里 || GitEE·点这里 一.生活场景描述 1.请假审批流程 公司常见的请假审批流程:请假天数 当 day<=3 天,项目经理审批 当 3<day<= ...
- Web渗透之mssql2005 差异备份getshell
这里记录下mssql2005差异备份拿shell的过程 http://192.168.5.21:81/index.asp?id=1;alter/**/database/**/[asp_test]/** ...
- 对新手严重不友好的强者——Nginx那些俯拾皆是的坑
1.if和后边的括号要隔一个空格,变量后面也要有空格. 2.location / 和location = / 的意味不一样.前面的是通用匹配,后面的匹配根节点访问请求,前面的使用不好很容易引发重定向过 ...
- std::multimap
标准库还定义了一个 multimap 容器,它与 map 类似,所不同的是它允许重复键. 成员函数 insert() make_pair() 辅助函数来完成此任务. find(k) 返回指向第一个与键 ...
- ESP8266开发之旅 网络篇③ Soft-AP——ESP8266WiFiAP库的使用
1. 前言 在前面的篇章中,博主给大家讲解了ESP8266的软硬件配置以及基本功能使用,目的就是想让大家有个初步认识.并且,博主一直重点强调 ESP8266 WiFi模块有三种工作模式: St ...
- vue入门笔记(新手入门必看)
一.什么是Vue? 1. vue为我们提供了构建用户界面的渐进式框架,让我们不再去操作dom元素,直接对数据进行操作,让程序员不再浪费时间和精力在操作dom元素上,解放了双手,程序员只需要关心业 ...
- ES6基本语法入门
一.用let代替var声明变量 ES5中,我们可以在代码中任意位置声明变量,甚至可以重写已经声明的变量,ES6引入了一个let关键字,它是新的var. let language = 'javascri ...
- Mysql数据库(0)习题分析
1.查询表中第二高工资的Id,如果没有,返回NULL.此题的关键是如果遇到Empty set,就必须要返回NULL. (1)使用子查询. offset ) AS SecondHighestSalary ...