一、前言

一直以来都是拿来主义,向大神学习,从网上找资料,现在就把自己在工作中和学习中的所理解的知识点写出来,好记星不如烂笔头,一来可以作为笔记自己温习,二来也可以给走在求学之路的同学们一点参考意见,有什么不对的地方还请大家指出,一起讨论共同成长。

Java面向对象:

(1)  java内存结构

1 栈

特点:有序的内存空间(先进后出原则).

创建方式:由程序平台自身创建.

存储内容:基本数据类型(简单数据类型)的值. 存放对象的在堆空间上的地址.

个数问题:java程序执行过程有很多个栈,往往为一个代码段(各种大括 号) 创建一个栈空间.

周期问题:若对应的代码段被执行完毕,则栈空间将马上回收

2 堆

特点:一种无序的内存空间.

创建方式:可以由程序员自己创建或申请(mailoc).

用途:用于存放一些较复杂的数据信息(自定义类型).

个数问题:Java程序的执行过程中只有一个堆(对所有方法和执行过程共享).

周期问题:从java虚拟机启动开始,一直到java虚拟机执行结束.

3 JVM内存结构全景图

堆:全局共享的无序存储空间(从JVM启动开始创建到JVM结束销毁).

栈:有序的存储空间(方法加载执行被创建分配,直到方法执行完毕栈被释放).

方法区:将所有类中的方法内容都存储起来,为执行提供代码信息(从JVM启动开始创建到JVM结束销毁).

执行上下文:用于存储即将执行的方法的调用关系和执行顺序的空间.

注:对象存放在堆中,引用则存放在栈中(因为栈存放数据时具有先进后出的特点,为了避免数据的重复挪用,则把数据的引用存在在栈中)。

(2)  java对象的组成

引用:存储在栈上的.

实例:存储在堆上的.

封装目的:隐藏实现的细节,降低开发的复杂度.

封装常用手段:定义方法.

(2)面向对象封装

特点:将封装体系加强,让封装有多个层次

封装层次:

类封装:根据类型所具备的功能,将相关的一组功能方法实现,并组合在一起,根据抽象的类型,将该类型的特征都封装在一起(一般不对类以外的代码公开)

包封装:

1 什么是包:一个代码封装单位,它将各种类型组织在一起,一个用于存放java文件的一个文件夹.

2 使用包:

定义语句:在类文件的第一行:package 包名;引用包下的类:import 包名.类名(两个类不在同一包时下使用);

访问修饰符:

概念:访问修饰符是用于定义类、方法、属性的可访问级别的关键字

访问级别:不同包之间的访问、同包之间的访问、子类对父类的访问、类内部之间的访问.

修饰符:

public:公有的,制定类、方法、属性可以被任何代码直接调用(包括不同包的情况).

default:(没有定义修饰符)只有在同包下的类才可以调用.

protected:保护的,可以让同包或者其子类调用.

private:私有的,只能让本类调用

访问级别顺序:private<default<protected<private

         注:关于继承和修饰符的问题:发生在方法重写时,子类中重写的方法,其访问修饰符必须比父类更大(更开发).

四、抽象类、接口

(1)   抽象类

1 什么是抽象类:一个允许有抽象定义存在的类,可以像普通类一样有属性、成员方法、构造函数.

2 怎样定义抽象类:访问修饰符 abstractclass 类名{……}

抽象方法:只有方法的声明,没有方法体

访问修饰符 abstract返回类型 方法名(参数列表);

3 抽象类构造对象:抽象类不能通过new 关键字直接实例化对象,抽象类可以作为父类被子类继承,子类必须实现父类中的抽象方法

注:抽象类可以定义引用,可以用这个引用去访问子类实例对象.

常见问题:

  • 抽象类的构造方法能否定义为私有?

答:不能,若定义为私有,则子类无法继承访问父类的构造方法.

  • 抽象类能否被实例化?

答:不能直接使用new实例化,但可以通过子类间接实例化

  • 抽象类的构造方法能否定义为abstract?

答:不能,因为构造方法不能被子类重写。

(2)   接口

1 什么是接口:java编程技术中最抽象的数据类型,不能定义任何实现,只能给出抽象方法的声明。

2 定义接口的方法: publicinterface 接口名{}

声明抽象方法:不需要使用abstract关键字,只能定义抽象方法的声明,可以不需要使用访问修饰符—默认是public.

3 实现接口:类implements 接口名,接口名。子类必须实现接口中定义的所有抽象方法(抽象类除外)

4 接口的意义:规范子类的行为,可以为定义标准提供编程支持,为代码的动态性提供更加灵活的类型匹配和识别标准,接口可以定义为引用,指向任何一个实现了该接口的类的实例对象;技术支持:动态绑定,抽象类型的引用,根据所指向的具体实现对象不同,而动态的改变。

5 接口上的其他成员:

静态常量:

static 静态关键字:修饰属性和方法,若被此关键字修饰的成员为静态成员。什么是静态?属性的存储位置不和对象在一起,而是独立的存放,保证一个JVM中该属性的内存只分配一次,只需要通过类直接调用。方法也不属于对象,只需要通过类直接调用。

final 最终关键字:

修饰类:表示这个类不能被继承;

修饰方法:表示这个方法不能被子类重写;

修饰参数:表示在方法体的执行过程中,参数值不能发生变化。

注:接口中定义的属性必定是静态常量(用static、final修饰的),定义可以省略static、fanal关键字。

6 接口的使用方式:用于定义抽象方法,为后面的实现提供方法的定义和约束—方法接口;用于定义一组有用的静态常量—常量接口。

常见问题:

  • 接口是否有构造方法?

答:没有构造方法,接口只能用来定义引用或为JVM做类型检查,不能以任何形式构造对象。

  • 一个类实现了多个接口,若用其中一个接口定义引用来操作,是否可以访问其他接口上的抽象方法?

答:接口类型的引用,只能访问该接口中声明的抽象方法,其他接口的方法无法调用。

  • 接口能否继承接口?

答:可以!可以通过extends关键字实现接口间的继承,允许同时继承多个接口。

(3)   接口与抽象类的关系:

1 可以使用接口来定义一组API的功能(方法).

2 可以使用抽象类将多个接口的要求整合在一起.

3 抽象类可以选择性的实现接口中定义的方法(抽象类一般扮演弗雷的角色;如果对某个功能的实现有通用或默认决绝方案是,抽象类可以选择实现;如果某个功能的实现需要与具体问题或使用场景相结合在决定的话,则抽象类可以不选择实现,再将其交给子类去考虑).

4 可以通过抽象类追加抽象方法.

五、static、final :

(1) static  (定义静态属性,定义静态方法,定义静态语句块)

1 什么是静态(static)?

从程序执行开始,就创建在那,并且不会改变位置的一组存储空间(变量,属性和方法)。相对于静态,程序中的动态即:对象是动态的,每new一个对象,都会分配一个新的存储空间,同一个类型的多个对象,都有相同名称的属性,但是属性值和存储位置不同。

2 什么是静态成员?

静态成员是定义在类中,但不属于某一个实例对象专属,而是在整个程序中唯一不变的属性、方法. 静态成员的访问方式:类名.属性名、类名.方法。

3 静态属性:只分配一次内存空间,该地址被所有对象共享使用,静态属性的操作可以不依靠对象。

4 静态方法:可以直接通过类来访问静态方法;静态方法的操作可以不依靠对象;静态方法上不能使用this关键字,也不能操作非静态属性和方法。

5 静态语句块  static{…代码…}

特点:在类加载时执行(jdk1.4在JVM开始执行时自动运行,jdk1.5在有效使用类时,才会运行该类的静态语句块).但只会执行一次,不会重复执行。

内容:程序启动时需要做的初始化运算或操作,可以用来给静态属性赋值或初始化。

注意:静态语句块放在所有静态属性之后定义,为的是方便初始化所有属性,如果定义在某些属性之前,可能造成静态属性的初始化失败。

6 静态导入语句 –jdk1.5之后引入的新技术.

效果:对另一个类的import导入发生在编译阶段,而通常不是在执行阶段。(可以导入一个静态属性或静态方法)。

实现语句:import static  包名.类名.静态成员

(2) final意思是最终,指不可再发生变化.

可修饰的成员:

修饰类:访问修饰符 finalclass 类名{…} 表示该类不能被继承,但final 不能修饰抽象类和接口.

修饰属性:访问修饰符 final 类型 属性名=… 表示该属性值不能被修改,在定义时必须给定其初始值.

修饰方法:访问修饰符final返回类型 方法名(参数列表) 表示该方法在继承过程中不能被重写,不能修饰抽象方法。

修饰方法参数:访问修饰符 final 返回类型 方法名(final 数据类型 arg,final 数据类型 arg).

修饰方法变量:在定义变量时加final,则该变量在方法执行的过程中,不可修改值(相当于常量).

(3)静态常量:常量名必须大写!可以使用import static 语句导入到个引用代码中直接访问.

java基础1.0::Java面向对象、面向对象封装、抽象类、接口、static、final的更多相关文章

  1. 7天学完Java基础之0/7

    笔记-7天学完Java基础之0/7 1.常用命令提示符(cmd) 启动:Win+R,输入cmd​

  2. 056 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 03 一维数组的应用

    056 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 03 一维数组的应用 本文知识点:数组的实际应用 程序开发中如何应用数组? 程序代码及其运行结果: 不同数据类 ...

  3. 055 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 02 数组的概念

    055 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 02 数组的概念 本文知识点:数组的概念 数组的声明创建.初始化 在学习数组的声明创建.初始化前,我们可以和之 ...

  4. 038 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 05 案例演示switch结构-星期的表示案例以及总结

    038 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 05 案例演示switch结构-星期的表示案例以及总结 本文知识点:案例演示switch结构并对sw ...

  5. 002 01 Android 零基础入门 01 Java基础语法 01 Java初识 02 Java简介

    002 01 Android 零基础入门 01 Java基础语法 01 Java初识 02 Java简介 学习Java的基础语法 Java是一门编程语言,学习的逻辑其实和现实世界的语言是一样的,需要了 ...

  6. Java基础16:Java多线程基础最全总结

    Java基础16:Java多线程基础最全总结 Java中的线程 Java之父对线程的定义是: 线程是一个独立执行的调用序列,同一个进程的线程在同一时刻共享一些系统资源(比如文件句柄等)也能访问同一个进 ...

  7. java基础学习总结——java环境变量配置(转)

    只为成功找方法,不为失败找借口! 永不放弃,一切皆有可能!!! java基础学习总结——java环境变量配置 前言 学习java的第一步就要搭建java的学习环境,首先是要安装 JDK,JDK安装好之 ...

  8. 060 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 07 冒泡排序

    060 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 07 冒泡排序 本文知识点:冒泡排序 冒泡排序 实际案例分析冒泡排序流程 第1轮比较: 第1轮比较的结果:把最 ...

  9. 051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试——debug入门1

    051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试--debug入门1 本文知识点: 程序调试--debug入门1 程序 ...

  10. 050 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 12 continue语句

    050 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 12 continue语句 本文知识点:continue语句 continue语句 continue ...

随机推荐

  1. SQL Server 索引设计指南

    https://msdn.microsoft.com/zh-cn/library/jj835095(v=sql.120).aspx#Nonclustered

  2. 转: windows 10使用原生linux bash命令行

    转: https://www.zybuluo.com/pandait/note/337430 windows 10使用原生linux bash命令行 linux bash windows-10 第一时 ...

  3. HTML 学习笔记 CSS(选择器4)

    CSS 后代选择器 后代选择器(descendant selector)又称为包含选择器.后代选择器可以选择作为某元素后代的元素. 根据上下文选择元素 我们可以定义后代选择器来创建一些规则,使这些规则 ...

  4. swift 集合类型(二)

    说到swift的集合类型,就不得不谈到Dictionary.包含一个键值对组合的集合. var air = ["name":"warner","tit ...

  5. 解决MWPhotoBrowser中的SDWebImage加载大图导致的内存警告问题

    下面两种现象,用同一种方法解决 1.解决MWPhotoBrowser中的SDWebImage加载大图导致的内存警告问题 2.突然有一天首页访问图片很慢,至少隔20多秒所有图片才会出来.(解析:app使 ...

  6. [转]各种有用的PHP开源库精心收集

    FROM : http://my.oschina.net/caroltc/blog/324024 1.html2ps and html2pdf    下载地址: http://www.tufat.co ...

  7. scala 学习笔记(01) 函数定义、分支、循环、异常处理、递归

    package yjmyzz import scala.io.StdIn object ScalaApp { def main(args: Array[String]) { println(" ...

  8. JavaScript系列:正则表达式

    function testExecResultType() { var txt = "mom and dad and baby"; var pattern = /mom (and ...

  9. 去除项目中的SVN标记

    第一步:建立一个名字叫做remove-svn-folders.reg的文本(先建立txt文件,然后粘贴内容后再修改文件名字),记得后缀要叫.reg.文本的内容为: Windows Registry E ...

  10. DataTrigger 绑定枚举

    在触发器中绑定枚举类型: <ControlTemplate.Triggers> <DataTrigger Binding="{Binding CheckStateEnum} ...