记录时间:2020年7月30日

学习书籍:《实战Java程序设计》《实战Java程序设计》微信读书电子版

配套视频:《Java课程300集》

一、面向对象

普通类、抽象类和接口的区别如下:

■ 普通类:具体实现。

■ 抽象类:具体实现,规范(抽象方法)。

■ 接口:规范。

1.抽象方法和抽象类

抽象方法使用abstract修饰的方法,没有方法体,只有声明。它定义的是一种“规范”,就是告诉子类必须要给抽象方法提供具体的实现。

包含抽象方法的类就是抽象类。抽象类通过abstract方法定义规范,要求子类必须定义具体实现。通过抽象类可以严格限制子类的设计,使子类之间更加通用。

抽象类的使用要点如下:(1)有抽象方法的类只能定义成抽象类。(2)抽象类不能实例化,即不能用new来实例化抽象类。(3)抽象类可以包含属性、方法和构造器,但是构造器不能用new来实例化,只能用来被子类调用。(4)抽象类只能用来被继承。(5)抽象方法必须被子类实现。

package com.abs
abstract class Animal1 {abstract public void shout();//抽象方法
}
//抽象类class Dog extends Animal1{//子类必须实现父类的抽象方法public void shout(){System.out.println("wang wang");}public void seeDoor(){System.out.println("看门中");}}
//测试抽象类
public class Animal{public static void main(String[] args){Dog a=new Dog();a.shout();a.seeDoor();}
}

2.定义和使用接口

比抽象类还抽象的“抽象类”,实现规范和具体实现的分离。

接口的声明格式:[访问修饰符] interface 接口名 [extedns父接口…]{}

定义接口的详细说明如下:

■ 访问修饰符:只能是public或默认设置。

■ 接口名:和类名采用相同的命名机制。

■ extends:接口可以多继承。

■ 常量:接口中的属性只能是常量,总是以public static final修饰,不写也是。

■ 方法:接口中的方法只能是public abstract,即使省略,也还是public abstract

要点:

■ 子类通过implements来实现接口中的规范。■ 接口不能创建实例,但是可用于声明引用变量类型。■ 一个类实现了接口,必须实现接口中所有的方法,并且这些方法只能是public的。■ 在JDK1.7之前的版本中,接口中只能包含静态常量和抽象方法,不能有普通属性、构造器和普通方法。■ 在JDK1.8之后的版本中,接口中包含普通的静态方法。

package com.abs;public class TestInterface {public static void main(String[] args){Angel a=new Angel();a.fly();Volant v=new BirdMan();v.fly();}
}
interface Volant{/**总是public static final类型的*/int FLY_HIGHT=100;void fly();//总是:public abstract void fly()的}/**善良接口*/
interface Honest{void helpOther();}/**Angel类实现飞行接口和善良接口*/
class Angel implements Volant,Honest{public void fly(){System.out.println("我正在飞");}public void helpOther(){System.out.println("帮助人");}}class BirdMan implements Volant{public void fly(){System.out.println("鸟人也会飞");}}

3. 内部类

内部类是一种特殊的类,它指的是定义在一个类的内部的类。为了方便使用外部类的相关属性和方法,通常需要定义一个内部类。

内部类可以使用public、default、protected 、private以及static来修饰,而外部顶级类(前面接触的类)则只能使用public和default来修饰。

package com.abs;class Outer{private int age=10;public void show(){System.out.println(age);}public class InnerClass {private int age=20;public void show(){System.out.println(age);}}
}

四. static关键字

在实际开发时,开发人员有时会希望在不创建对象的情况下就可以调用某个方法,换句话说也就是使该方法不必和对象绑在一起。要实现这样的效果,只需要在类中定义的方法前加上static关键字即可,通常称这种方法为静态方法。同静态变量一样,静态方法可以使用“类名.方法名”的方式来访问,也可以通过类的实例对象来访问。

注意:在一个静态方法中只能访问用static修饰的成员,原因在于没有被static修饰的成员需要先创建对象才能访问,而静态方法在被调用时可以不创建任何对象。

五.容器

由于数组并不能满足人们对于“管理和组织数据的需求”,所以需要一种更强大、更灵活、可随时扩容的容器来装载对象,这就是本章要介绍的容器,也称作集合(Collection)。

image.png

在类的声明处可以增加泛型列表,如<T, E, V>。

Collection表示一组对象,它是集中或收集的意思。Collection接口的两个子接口是List与Set接口。

List是指有顺序、可重复的容器。

List接口常用的实现类有3个:ArrayList、LinkedList和Vector。

ArrayList的底层是用数组实现存储的,其特点是查询效率高,增删效率低,线程不安全。

LinkedList底层用双向链表来实现存储,其特点是查询效率低,增删效率高,但线程不安全。

Vector底层是一个长度可以动态增长的对象数组,它的相关方法都进行了线程同步,因此“线程安全,效率低”

如何选用ArrayList、LinkedList和Vector?■ 需要线程安全时,用Vector。■ 不存在线程安全问题并且查找较多时,用ArrayList(一般使用它)。■ 不存在线程安全问题,但增加或删除元素较多时,用LinkedList。

Map就是用来存储“键(key)—值(value)”对的

image.png

HashMap采用散列算法来实现,它是Map接口最常用的实现类。由于底层采用哈希表来存储数据,因此要求键不能重复,如果发生重复,新的键值对会替换旧的键值对。HashMap在查找、删除、修改方面的效率都非常高。

HashTable类和HashMap用法几乎一样,底层实现也几乎一样,只是HashTable的方法添加了synchronized关键字以确保线程同步检查,效率较低。

HashMap与HashTable的区别■:

HashMap:线程不安全,效率高。允许key或value为null。■ HashTable:线程安全,效率低。不允许key或value为null。

TreeMap是红黑二叉树的典型实现。

SET
Set接口继承自Collection, Set接口中没有新增方法,方法和Collection保持完全一致,前面通过List学习到的方法,在Set中仍然适用

Set容器的特点是无序、不可重复。无序指Set中的元素没有索引,只能通过遍历方式查找;不可重复指不允许加入重复的元素。

Set常用的实现类有HashSet和TreeSet等,一般使用HashSet。

TreeSet的底层用TreeMap实现,其内部维持了一个简化版的TreeMap,并通过key来存储Set的元素。TreeSet内部需要对存储的元素进行排序,因此,对应的类需要实现Comparable接口

使用TreeSet应注意以下两点:

(1)由于TreeSet底层是一种二叉查找树(红黑树),需要对元素做内部排序。如果要放入TreeSet中的类没有实现Comparable接口,则会抛出异常java.lang.ClassCastException。(2)TreeSet中不能放入null元素。

Iterator接口
Iterator接口可以让开发者实现对容器中对象的遍历。

Collections工具类
java.util.Collections类提供了对Set、List、Map进行排序、填充、查找元素的辅助方法:

■ void sort(List):对List容器内的元素排序,排序的规则是按照升序排序。

■ void shuffle(List):对List容器内的元素进行随机排列。

■ void reverse(List):对List容器内的元素进行逆序排列。

■ void fill(List, Object):用一个特定的对象重写整个List容器

。■ int binarySearch(List, Object):对于顺序的List容器,采用折半查找方法来查找特定对象。

Class类:

Class类封装一个对象和接口运行时的状态,当装载类时,Class类型的对象自动创建。

  Class 没有公共构造方法。Class 对象是在加载类时由Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的,因此不能显式地声明一个Class对象。虚拟机为每种类型管理一个独一无二的Class对象。也就是说,每个类(型)都有一个Class对象。运行程序时,Java虚拟机(JVM)首先检查是否所要加载的类对应的Class对象是否已经加载。如果没有加载,JVM就会根据类名查找.class文件,并将其Class对象载入。基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也都对应一个 Class 对象。每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。一般某个类的Class对象被载入内存,它就用来创建这个类的所有对象。

Java学习之面向对象相关推荐

  1. 深圳Java学习:面向对象【重点知识】

    深圳Java学习:面向对象[重点知识] 在Java的学习中,面向对象应该是Java技术的重中之重,虽然在生活中没有对象可以面对,但在技术中还是要一直接触面对对象,而且不可避免.今天千锋小编对面向对象来 ...

  2. Java学习笔记——面向对象

    声明:文章首发于我的个人微信公众号Java编程社区,查看更多文章与学习资源请移步我的公众号Java编程社区 万物皆对象 学习Java,我们都听过这句话:万物皆对象.那么什么是对象? 我们先来看看人类是 ...

  3. Java学习笔记——面向对象 1

    声明:本文首发于我的个人微信公众号[Java编程社区],查看更多文章与学习资源请移步我的公众号Java编程社区 万物皆对象 学习Java,我们都听过这句话:万物皆对象.那么什么是对象? 我们先来看看人 ...

  4. java学习之面向对象和封装

    面向过程:当需要实现一个功能的时候,每一个具体的步骤都要亲力亲为,详细处理每一个细节. 面向对象:当需要实现一个功能的时候,不关系具体的步骤,而是找一个已经具有该功能的人帮忙做事情. 面向过程强调步骤 ...

  5. day8 Java学习(面向对象.多态接口)

    面向对象    多态: 概述:事物存在的多种形态.  多态前提: *要有继承关系 *要有方法重写 *要有父类引用指向子类对象. 成员变量访问:           编译看左边(父类),运行左边(父类) ...

  6. 【java学习】 面向对象编程+java购物车系统

    文章目录 一.设计对象 二.内存机制 三.购物车系统 四.构造器 构造器 this关键字的作用 一.设计对象 类和对象是什么? 类:是共同特征的描述(设计图); 对象:是真实存在的具体实例; 如何设计 ...

  7. #Java学习总结面向对象+抽象+接口

    1.类和对象 类 类是对现实生活中一类具有共同属性和行为的事务的抽象:类是对象的数据类型,类是具有相同属性和行为的一组对象的集合.简单理解:类就是对现实事务的一种描述. 类的组成: 属性:指事物的特征 ...

  8. Java学习:面向对象编程

    探索面向对象编程 面向对象 任务1.采用面向对象方式求三角形面积 (一)编程实现 (二)讲解知识点 (三)拓展练习 任务1.创建学生类并测试 任务2.采用面向对象求解一元二次方程 面向对象 面向对象( ...

  9. Java学习_day009面向对象(oop):对象和类(下)

    方法的签名:方法名+参数列表 在一个类中不允许出现多个方法签名重复的情况 一.方法的重载(overload) 发生在同一个类中,方法名称相同,参数列表不同,方法体就不同. 编译器在编译时会根据方法的签 ...

  10. Java学习_day008面向对象(OOP):对象和类

    面向对象:OO 面向对象的分析:OOA 面向对象的设计:OOD 面向对象分析与设计:OOAD--目标 面向对象的编程:OOP--起始点 高质量代码的要求(OO终极目标):复用性好.拓展性好.维护性好. ...

最新文章

  1. 如何有效的使用C#读取文件
  2. 一种解决启动进程传递参数过长的方法
  3. 使用二代矫正三代全长转录组数据
  4. java实现快速排序
  5. 《高性能javascript》 领悟随笔之-------DOM编程篇(二)
  6. CentOS下yum源epel扩展源
  7. Tesseract OCR——Windows 10 + CMake-GUI + Visual Studio 2019下编译和使用解决方案
  8. 禁止网页右键、复制、另存为、查看源文件等功能
  9. 《HTML5实战》——1.4 其他API和规范
  10. SAP C4C和Gigya(Customer Data Cloud)的客户报表
  11. linux安装pip
  12. Pycharm如何取消自动换行
  13. linux之Fedora 20 开启telnet服务
  14. 如何使用Tuxera NTFS for Mac禁用特定NTFS分区
  15. php laravel 分页,laravel 分页问题
  16. 用于AB测试的减少方差方法总结和对比
  17. 英特尔超级计算机显卡,美国公布首台百亿亿次超级计算机!用上Intel Xe独立显卡...
  18. 智能优化算法:白鲸优化算法-附代码
  19. Cocos Creator 开发入门
  20. Mezzanine入门

热门文章

  1. 【论文下饭】Temporal Graph Network for Deep Learning on Dynamic Graphs
  2. 解析Linux中的VFS文件系统
  3. 【重温C/C++】explicit+||template||virtual虚函数||重载和重写
  4. 独行侠作风之CRM实施阻力
  5. 测试开发知识总结(一)
  6. 出海必读,汇量科技联合SensorTower发布《2022国内手游出海白皮书》
  7. Win10_ltsc_2019_x64集成DPO基于人工智能优化可动态提高应用程序性能提升高达394%
  8. 【雷达与对抗】【2015】【部分源码】用于雷达成像与信道探测的FMCW信号
  9. requests爬取4399游戏链接
  10. 拼多多推广没用怎么办?