一、类
  1. 类对象的数据结构定义,方法是对象的行为。
  2. 类是数据类型。
  3. 一个类可以创建多个对象,这多个对象结构相同,数据不同。
  4. 类中可以包含:(1)成员变量(对象的共同特征,静的);(2)方法(对象的共同行为,动的,常常用作操作成员变量)
  5. 一个.java文件可以包含多个类,但是public的类只能有一个,并且这个类的名字必须和文件的名字一样,实际编码中建议一个文件只放一个类。
 
二、对象
  1. 对象的产生有三种方式:(1)工厂方法;(2)构造器new;(3)依赖注入。
  2. 引用类型声明的变量,通常称为引用。
  3. new出来的对象存储在堆中。
  4. 创建对象时,给成员变量分配空间,并赋默认值。
  5. 通过引用对堆中的数据进行访问。
  6. 成员变量存储在堆中,局部变量存储在栈中。
  7. 基本类型之间,“=”是赋值;引用类型之间,“=”意味着指向同一个对象。
  8. 当引用类型为null时,不能做任何“.”的操作,不然运行时会提示“NullPointerException”。
 
三、方法
  1. 一个类中不可以有签名完全相同的方法。
  2. 在一个类中,多个方法的方法名相同,参数列表不同,称为方法的重载。(跟返回值无关)
  3. 由编译器根据方法的签名来调用不同的方法。
 
四、构造方法
  1. 与类同名,没有返回值,也没有返回类型。
  2. 在创建对象时,编译器会自动调用。
  3. 构造方法的作用是,初始化成员变量。
  4. 若自己不写构造方法,编译器给无参构造,若自己有写,编译器则不再提供。
  5. 构造方法(构造器)初始化对象,一般是初始化对象的数据(有时也会有算法)。
 
五、this关键字
  1. this用于指代当前对象,谁调用指的就是谁。
  2. 当成员变量和局部变量重名时,需要用this关键字来指向成员变量。
  3. this([参数]); 用于调用本类的构造方法,如:this();
  4. this在运行期间,引用调用方法的对象。
 
六、堆内存
  1. 堆中用于存储程序中所创建的对象,包含成员变量。
  2. 成员变量生命周期:创建对象时存在,对象被回收时消失。
  3. 当一个对象没有被引用时,属于被回收的范围,由垃圾回收器不定时进行回收。
  4. 垃圾回收过程时透明的(看不到的),若想快些,用String.gc(); 建议快些回收。
  5. 内存泄漏是指不再使用的对象,没有被及时回收。建议:不再被使用的对象,及时将其引用设置为null。
 
七、栈
  1. 栈中用于存储所有的局部变量,基本类型直接存储的是值,引用类型存储的是地址。
  2. 方法调用时,在栈中开辟一个栈帧,栈帧中存储该方法的参数以及局部变量,当方法调用结束,栈帧被清除,局部变量随之消失。
 
八、方法区
  1. 方法区用用于存储类的相关信息,以及类中方法的定义,每个类只被装载一份。
 
九、继承
  1. 父类中放子类所共有的东西,子类中放子类所特有的东西。
  2. 当继承发生后,子类具有父类的成员以及本类中的成员。
  3. java只支持单一继承。
  4. 继承具有传递性。
 
十、继承中的构造方法
  1. java规定,在子类构造之前,必须先构造父类。
  2. 在子类构造方法中,编译器默认假如super(); 用于调用父类无参的构造。
  3. super(); 用于调用父类构造方法,必须位于子类构造方法中的第一句。
 
十一、向上造型
  1. 父类的引用,可以指向子类的对象,叫做向上造型。
  2. 访问类中的成员,是根据引用的类型,而不是对象的类型。
 
十二、重写
  1. 方法重写。当子类方法和父类方法的方法签名相同时,子类重写了父类的方法。
  2. 当重写发生时,只要和子类相关,调用的就是子类重写后的方法。
  3. super方法可以访问父类的方法。(注意static环境下不能使用super)
  4. 重写是子类重写了父类的行为,运行期间,根据对象的实际类型,调用相应的方法。
 
十三、包
  1. 包package的作用:避免命名冲突。
  2. 建议每个类都放在对应的包中,包名所有字母小写。
  3. 当声明包和类后,类的全称为:包名.类名
  4. 为了避免繁琐,建议通过import来声明类。
 
十四、访问控制修饰符
  1. public 公有的,所有类都可以访问。
  2. private 私有的,只能本类访问。
  3. protected 受保护的,只能子类或同包可以访问。
  4. 没有定义修饰符,默认只能同包类可以访问。
  5. 访问修饰符,只能用来修饰成员变量和方法,不能用来修饰局部变量。
 
十五、static关键字
  1. static修饰成员变量,属于类,存在方法区中,只有一份,通过类名来访问。
  2. static修饰方法,通常用作工具方法以及工厂方法。静态方法通过类名来访问。
  3. static方法中,不能使用this关键字。静态方法是和对象无关的方法。
  4. static块,属于类的代码块,只执行一次,常用于加载静态资源。
  5. static方法中,只能直接访问static成员,访问非static成员,需要先new出对象。
  6. 静态变量是公共的,非静态变量(也叫实例变量),是属于某个对象的。
 
十六、final关键字
  1. final修饰变量,不可被改变。
  2. final修饰方法,不可被重写。(防止子类在定义新方法时,造成“不经意”重写)
  3. final修饰类,不可被继承。(可以保护类不被继承修改,控制滥用继承对系统造成的危害)
 
十七、static final 常量
  1. static final 修饰的成员变量称为常量,必须声明同时初始化。
  2. static final 常量会在编译期被替换。
 
十八、抽象方法和抽象类
  1. 由abstract修饰的方法为抽象方法,抽象方法只有方法的定义,没有方法体实现,用一个分号结尾。
  2. 一个类中,如果包含抽象方法,该类应该用abstract关键字声明为抽象类。
  3. 如果一个类继承了抽象类,必须重写其抽象方法(除非该类也声明为抽象类)。重写所有的抽象方法,子类就是一个普通的类,不重写抽象方法,子类也必须是抽象类。
  4. 抽象类不可以实例化。
  5. 即使一个类中,没有抽象方法,也可以将其定义为抽象类。(意义在于这个类不想被实例化)
  6. abstract和final不可以同时用于修饰一个类,因为final关键字使得类不可以继承,而abstract修饰的类如果不可以继承将没有任何意义。
  7. 抽象类的定义:(1)为子类提供了公共的类型。(2)封装子类中重复的内容(父类特性)。(3)可定义抽象方法,由子类用不同的方法体重写。
 
十九、接口
  1. 接口定义了一个标准的规范。
  2. 接口可以看作特殊的抽象类,其中只能包括抽象方法和常量。
  3. 实现类(子类)通过implements来实现接口,实现接口必须实现接口中所有的抽象方法。
  4. java规定,一个类可以实现多个接口,用逗号分隔,当又想继承又想实现接口时,先继承父类再实现接口。
  5. 接口是一种数据类型,可以向上造型:接口名 引用 = new 实现类
  6. 接口之间可以相互继承,使用extends关键字。
 
二十、多态
  1. 向上造型。(1)一个类的对象可以向上造型的类型有:a.父类的类型,b.其实现的接口类型。(2)java编译器根据类检查调用方法是否匹配。
  2. 强制转型。(1)可以将父类和接口看作大类型,子类看作为小类型。(2)小到大,自动向上造型;大到小,需强制类型转换。(3)强转时,看对象。(4)强转有两种情况能成功:a.对象就是那个类型;b.对象实现了那个接口。(5)强转之前,最好通过 instanceof判断,语法:if (引用 instanceof 数据类型){...}
  3. 多态的意义:(1)一个类型的引用在指向不同的对象时会有不同的实现。(2)同样一个对象,向上造型成不同类型时,会有不同的功能。
 
二十一、内部类
  1. 声明在类内部的类,就是内部类。使用内部类的目的,是为了封装类的定义,使得它只在类的内部有效。
  2. 在内部类中,可以使用Out.this来访问外部类的属性和方法。(不写的话默认有)
  3. 成员内部类,必须使用外部类实例来创建对象。
  4. 成员内部类对象可以访问外部类的属性和方法。
  5. 在内部类中,Outer.this与this:(1)可以省略Outer.this访问外部类的对象的属性和方法。(2)可以省略this.内部类对象的属性和方法。(3)如果不能区分外部属性和当前属性的时候,不能省略。
 
二十二、匿名内部类
  1. 封装类的定义在方法中。
  2. 匿名内部类的语法“简洁”方便。
  3. 语法过于简洁,不容易分辨。
  4. 是在声明类时,同时创建了一个对象的语法现象。
  5. 匿名内部类,一定从父类继承(实现),一定有父类型(类,抽象类,接口)。
 
二十三、类的可见范围与选用
  1. 公有类:public class Foo(任何地方可以见)
  2. 默认类(同包类):class Foo(当前包中可见,用的不多)
  3. 成员内部类:在一个类内部声明(默认private)
  4. 匿名内部类:在方法中定义(最彻底的封装)
 
 
 
 
 
 
 
 

T-2-java面向对象的更多相关文章

  1. JAVA面向对象

    JAVA面向对象 对象   我们生活中能看到能摸到的一切事物都是对象.在程序中模拟出生活中的所有东西万物皆对象   只要是对象--属性和行为(方法)   属性   对象有什么   例如:学生有姓名.学 ...

  2. 理解JAVA - 面向对象(object) - 属性,方法

    理解JAVA - 面向对象(object) - 属性,方法 多态的体现:    向上造型,父类接收子类对象:向上造型:    从父类角度看不到子类独有的方法:面向对象,人类认知世界的方式:生活中每天都 ...

  3. Java面向对象㈠ -- 封装

    Java的面向对象有三大特征:封装.继承.多态.这里主要对封装进行讲解. 封装可以理解为隐藏一个类的成员变量和成员函数,只对外提供需要提供的成员函数. Java的封装主要通过访问权限控制符:priva ...

  4. 谈谈Java面向对象的三大特性

    Java面向对象的三大特性就是指封装.继承.多态了. 一.封装: 概念:封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式. (举例:笔记本电脑就是一个封装体,Java语言中最小的封装体就是函数 ...

  5. Java面向对象:接口

    Java面向对象之接口 什么是接口:接口是一种规范和标准,他们可以约束类的行为,是一些方法特征的集合 语法: [修饰符] interface 接口名 extends 父接口1,夫接口2....... ...

  6. 实验二 Java面向对象程序设计

    实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...

  7. java基础1.0::Java面向对象、面向对象封装、抽象类、接口、static、final

    一.前言 一直以来都是拿来主义,向大神学习,从网上找资料,现在就把自己在工作中和学习中的所理解的知识点写出来,好记星不如烂笔头,一来可以作为笔记自己温习,二来也可以给走在求学之路的同学们一点参考意见, ...

  8. 20145212《Java程序设计》实验报告二 《 Java面向对象程序设计》

    20145212 实验二< Java面向对象程序设计> 实验内容 单元测试 三种代码 伪代码 百分制转五分制: 如果成绩小于60,转成"不及格" 如果成绩在60与70之 ...

  9. 20145213《Java程序设计》实验二Java面向对象程序设计实验报告

    20145213<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装,继承,多态 初步掌握UML建模 熟悉S.O. ...

  10. 20145206《Java程序设计》实验二Java面向对象程序设计实验报告

    20145206<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...

随机推荐

  1. Why Everyone Should Lift Weights

    Why Everyone Should Lift Weights by James Clear I'll say it plain and simple: you should be lifting ...

  2. Linux 操作命令

    1. Linux 概述1.1. 内核版本    从技术角度来讲, Linux只是一个系统内核,一个内核并不是一套完整的操作系统.一套完整的操作系统应该包括内核. GNU应用程序库和工具.图形桌面环境等 ...

  3. 快速干掉Windows Defender

    1.快捷键Win+R,调出"运行"对话框,输入"gpedit.msc",打开组策略编辑器: 2.展开"计算机配置"→"管理模板&q ...

  4. Redis 哨兵节点之间相互自动发现机制(自动重写哨兵节点的配置文件)

    Redis的哨兵机制中,如果是多哨兵模式,哨兵节点之间也是可以相互感知的,各种搜索之后出来的是千篇一律的一个基础配置文件,在配置当前哨兵节点的配置文件中,并没有配置其他哨兵节点的任何信息.如下是一个哨 ...

  5. 聊聊JMM

    JMM是什么? JMM 全称 Java memory model ,直译过来就是Java内存模型,这里注意了,指到并不是JVM中的内存分布新生代.老年代.永久代这些,当然也不是 程序计数器(PC).j ...

  6. CSS 图像高级 径向渐变

    径向渐变 径向渐变使用 radial-gradient 函数语法. 这个语法和线性渐变很类似, 可以指定渐变结束时的形状 以及它的大小. 默认来说,结束形状是一个椭圆形并且和容器的大小比例保持一致. ...

  7. 关于新版oracle不支持wm_concat函数的解决办法

    oracle12G中不支持wm_concat,就改用:listagg(合并字段,'连接符号') within group (order by 字段) 来实现列转行

  8. ABAP 程序/接口调用其他程序的数据

    在ABAP遇到的业务场景中,可能会遇到一种情况,需要调用其他报表的数据来发送或者二次加工,这个时候又不想对源程序做大的改动.有以下几种思路解决. 1.修改源程序,将需要展示的数据存储到DB中,然后主程 ...

  9. pwnable.kr-bof-witeup

    根据原程序可知,输入overflowme变量覆盖key变量即可,所以接下来应该看俩变量的距离,从而构造覆盖的payload. 嗯,他们相差了52个地址,overflowme变量在低地址,存放函数的栈中 ...

  10. 贪吃蛇(简易版)Leslie5205912著

    # include <stdio.h># include <string.h># include <windows.h># include <stdlib.h ...