1、static修饰的变量叫做“静态变量”(静态变量,被存储在方法区中,所有的java对象共享静态变量,所有静态变量是类级别的,使用“类名.”的方式访问。),static修饰的方法叫做“静态方法”(静态方法中不能够直直接访问非静态数据。工具类中的方法大部分都是静态方法。 ),static还可以定义静态语句块。(静态语句块的语法为:static{java语句},静态语句块在类中可以有一个,也可以有多个。静态语句块在类加载的阶段执行,并且执行一次。并且(如果有多个静态语句块)是自上而下依次执行。)

  • 实例语句块在每次调用构造方法之前执行,且(如果有多个实例语句块)是自上而下依次执行。语法:{java语句}。
  • 静态的方法按照正规的方式“类名.”访问,静态的方法也能够使用“引用.”访问。(编译阶段会检查出引用的类型,编译通过,运行的时候,仍然使用“类名.”的方式去访问,静态方法执行不需要对象。)
  • 成员变量在创建对象的时候初始化,静态变量在类加载阶段赋值,并且只赋值一次。
  • 什么是设计模式:设计模式是可以重复利用的解决方案,从结构上可以分为三类:创建型、结构型和行为型。最简单的设计模式是单例设计模式:为了保证JVM中某一个类型的java对象永远只有一个,节省内存的开销。实现懒汉式单例设计模式的简单方式:将构造方法私有化,并对外提供一个公开获取这个类的对象的方法(该方法为静态方法,采用(类名.)的方式调用。),以及在类中提供一个这个类类型的静态变量。(懒汉式用到对象的时候才会创建。)(==两边如果是基本数据类型,可以比较这两个基本数据类型是否相等,==两边如果是引用数据类型,则比较的是内存地址。)
  • 饿汉式单例设计模式:在类加载时已经创建单例对象。
    package com.geeklicreed.j2se;
    /*
    饿汉式单例模式
    */
    public class Customer {
    // 类加载时只执行一次
    private static Customer c = new Customer();
    // 构造方法私有化
    private Customer() {
    }
    // 对外提供一个公开获取这个类的对象的方法
    public static Customer getInstance() {return c;
    }
    }

2、引用类继承最基本的作用是代码重用。语法:[修饰符] class 子类名 extends 父类名。

  • java语言中,类和类之间只支持单继承。一个类如果没有显示的继承其他类,则该类默认继承Object。Object是SUN提供的java中的根类。(继承是面向对象的重要概念,软件中的继承和现实中的继承概念是一样的)
  • java语言中子类继承父类,会将父类中所有数据全部继承(构造方法无法被子类继承),包括私有的也能够继承过来,但是在子类中无法直接访问父类中的私有的数据,但是可以间接访问。(通过setter和getter方法访问和修改私有数据)
  • 方法的覆盖或者说是方法的重写:(override或者overwrite)如果父类中的方法无法满足当前子类中的业务需求,需要将父类中的方法进行重新写一遍。(如果子类重写父类中的方法之后,子类对象一定调用的是子类重写的方法)。
  • 发生方法覆盖的条件:a、发生在具有继承关系的两个类之间;b、具有相同的方法名、相同的返回值类型、相同的参数列表;c、重写的方法不能比被重写的方法拥有更低的访问权限;d、重写的方法不能比被重写的方法抛出更宽泛的异常;e、私有的方法不能被覆盖;f、构造方法无法被覆盖,因为构造方法无法被继承;g、静态的方法不存在覆盖;h、覆盖指的是成员方法,和成员变量无关。(继承最基本的作用是代码重用,最重要的作用是方法可以重写。)

3、java语言中向上转型(upcasting,子类转父类)和向下转型(downcasting,父类转子类),无论是向上转型还是向下转型,两个类之间必须要有继承关系。

  • 向上转型又称为自动类型转换,父类型的引用指向子类型的对象(如Animal a = new Cat();),程序分为编译阶段和运行阶段两个阶段,编译阶段只知道a是一个Animal类型,而程序在运行的时候堆中实际对象是Cat类型。(a.eat();代码)表示程序在编译阶段a变量被编译器看作是Animal类型,所以程序在编译阶段a.eat()绑定的是Animal类中的eat方法(静态绑定);而程序在运行的时候堆中的实际对象是Cat类型,而Cat已经重写了eat方法,所以程序在运行阶段对象绑定的方法是Cat中的eat()方法。(动态绑定)
  • 向下转型又称之为强制类型转换。(需要注意,Animal a = new Dog();Cat c = (Cat)a;编译阶段能够通过,但是程序在运行期可能会出错,会报java.lang.ClassCastException异常,所以在做强制类型转换的时候是存在风险的。)
  • 为了避免ClassCastException的发生,java引入了instanceof。用法:instanceof运算符结果是boolean类型。(Cat a = new Cat();if(a instanceof Cat){Cat c = (Cat)a};如果结果是true,a引用指向堆中的java对象是Cat类型。)
  • 多态的作用:项目的耦合度降低,项目的扩展能力增强。(尽量不要面向具体编程,面向父类型进行编程,面向抽象编程)

4、super不是引用类型,super中存储的不是内存地址,super指向的不是父类对象,而是代表当前子类对象中的父类型特征。

  • 什么时候使用super?父类和子类中都有某个数据或者相同的方法,如果要在子类中访问父类中的属性或者方法,需要使用(super.)的方式。
  • super可以使用在什么地方?super可以在成员方法中;(super和this相同,都不能直接用在静态上下文中)
  • super关键字用在构造方法中,语法为:super(实参);,通过子类的构造方法去调用父类的构造方法,作用是给当前子类对象中的父类型特征赋值。(如果一个构造方法第一行如果没有this(...);也没有显式地调用super(...);系统会默认调用super();)。super(...);的调用只能够放在构造方法的第一行中,和this(...);一样,所以this(...);和super(...);不能共存。
  • 需要注意的是,super(...)调用了父类的构造方法,但是并不会创建父类对象。(构造方法执行不一定创建对象)
  • 在java语言中,只要是创建了java对象,那么Object中的无参数构造方法一定会执行。
  • 父类的构造方法并不会被子类继承,但是可以被子类调用。(单例模式的类型无法被继承,即单例模式的类型没有子类。原因是单例模式构造方法私有化,子类的构造方法无法使用super();调用父类的私有构造方法。)

5、final修饰的类无法被继承,final修饰的方法无法被覆盖,final修饰的局部变量一旦赋值,不可再改变,final修饰的成员变量必须“显式的”初始化。class A{final int i;}编译无法通过。(要么final修饰的成员变量手动初始化,要么在构造方法调用结束之前赋值也行。如class A{final int i = 1200}或者class A{final int = k; A(){k = 1200;}} )(一般情况下,final修饰的成员变量一般和static连用,称之为常量。)

  • 常量为值不可改变的变量,要求所有的常量大写。

6、如何定义抽象类:class关键字前加上abstract。(抽象类无法被实例化,即抽象类无法创建对象。)

  • 虽然抽象类没有办法实例化,但是抽象类也有构造方法,该构造方法是给子类创建对象使用的。
  • 抽象类中可以定义抽象方法,抽象方法的语法为:在方法的修饰符列表中添加abstract关键字,并且抽象方法应该以“;”结束,不带“{}”。(例如:public abstract void m();)
  • 抽象类中不一定有抽象方法,但是抽象方法必须出现在抽象类中。
  • 一个非抽象类继承一个抽象类,必须将抽象类中的抽象方法覆盖。
  • 抽象类不能被final修饰;抽象方法不能被final修饰。(显示为非法的修饰符组合)
  • final修饰的引用类型,该引用不可再重新指向其他的java对象,但是final修饰的引用,该引用指向
    的对象的属性是可以修改的。

7、接口也是一种引用类型,可以等同看作类。

  • 如何定义接口,语法为:[修饰符] interface 接口名{}(需要注意的是,接口中只能够出现常量和抽象方法)
  • 接口其实是一种特殊的抽象类,特殊在于接口是完全抽象的。
  • 接口中也没有构造方法,是无法被实例化的。
  • 接口和接口之间可以进行多继承。
  • 一个类可以实现多个接口。(一个类实现一个接口,需要使用implements关键字,implements和extends意义相同,这里的实现可以等同看作继承。),一个非抽象的类实现接口,需要将接口中的所有的方法“实现”。(或者说是重写)
  • 在接口中常量用public static final修饰,public static final可以省略。接口中所有的抽象方法都是public abstract,public abstract可以省略。
  • 接口的作用:a、可以使项目分层,所有层都面向接口开发,开发效率提高;b、接口使代码和代码之间的耦合度降低,就像内存条和主板的关系,变得“可插拔”,可以随意地切换。
  • 接口和抽象类都能完成某个功能,优先选择接口。(因为接口可以多实现,多继承,并且一个类除了实现接口之外,还可以去继承其他类,保留了类的继承。)

转载于:https://blog.51cto.com/12402717/2045891

j2se学习中的一些零碎知识点2之基础知识相关推荐

  1. 开发过程中js遇到的问题及一些基础知识恶补

    Supermarket 开发过程中js遇到的问题及一些基础知识恶补 函数相关问题 DOM元素相关操作 变量操作 异常捕获 开发过程中关于条形码识别 开发结束关于前端板块思路 函数相关问题 (funct ...

  2. python基础学习中要懂的知识点:反射机制

    反射是什么 反射指在程序运行过程中可以动态获取对象的信息. 是通过字符串的形式 ,导入模块:通过字符串的形式,去模块 寻找指定函数 ,并执行.利用字符串的形式去对象中操作成员,一种 基于字符串的驱动 ...

  3. 深度学习中的3个秘密:集成、知识蒸馏和蒸馏

    作者:Zeyuan Allen-Zhu 来源:AI公园 编译:ronghuaiyang 在现在的标准技术下,例如过参数化.batch-normalization和添加残差连接,"现代&quo ...

  4. python的知识点运用_程序猿在Python编程中不得不使用的十二种基础知识

    Python编程中常用的12种基础知识,其中肯定有你不会的! 人生苦短,我用Python 1.正则表达式替换 目标: 将字符串line中的 overview.gif 替换成其他字符串. 人生苦短,我用 ...

  5. java程序设计基础知识点_Java编程语言基础知识的要点

    原标题:Java编程语言基础知识的要点 很多Java编程初学者在刚接触Java语言程序的时候,不知道该学习掌握哪些必要的基础知识.下面就说说Java零基础学习Java编程语言基础知识的几个要点.希望能 ...

  6. Java 面试知识点解析(一)——基础知识篇

    前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...

  7. 【Java学习从入门到入土,手把手吧基础知识填充进你的大脑】

    [JAVA简介] Java已经多年连续占据编程语言的榜首,Java是一门面向对象编程语言,它不仅吸收了C++语言的各种优点,还摒弃了C++语言中难以理解的多继承.指针等概念,因此Java语言具有功能强 ...

  8. 【网络安全入门】学习网络安全必须知道的100 个网络基础知识

    什么是链接? 链接是指两个设备之间的连接.它包括用于一个设备能够与另一个设备通信的电缆类型和协议. 2 OSI 参考模型的层次是什么? 有 7 个 OSI 层:物理层,数据链路层,网络层,传输层,会话 ...

  9. python基础知识点总结-python基础知识,python知识点汇总大一

    阶段一:Python开发基础 Python全栈开发与人工智能之Python开发基础知识学习内容包括:Python基础语法.数据类型.字符编码.文件操作.函数.装饰器.迭代器.内置方法.常用模块等. 阶 ...

最新文章

  1. 异构GoldenGate 12c 双向复制配置
  2. android 判断时间是否过期_眉笔眉粉有保质期吗?怎么判断眉笔眉粉是否过期?...
  3. C语言字符串函数大全
  4. Java基础 —— 异常
  5. React 与 可视化
  6. UE3 贴图支持及设置
  7. 关于Ajax工作原理
  8. 【FLink】Flink checkpoint 实现数据连续计算 恢复机制 案例实战
  9. MySQL数据库加密和解密~认证登陆密码(mysql.user)和MySQL不区分大小写
  10. python安装离线包window_python 离线安装unrar库
  11. 20191202_Python支持向量机的实现
  12. AirBuddy技巧:如何检查Mac电脑是否支持低功耗蓝牙?
  13. 《嵌入式 – GD32开发实战指南》第7章 定时器
  14. Fiddler抓包没有网!
  15. python课程作业-贪吃蛇
  16. PM_24 项目管理成熟度模型(了解)、26 知识产权与标准规范、收尾管理
  17. 2021-07-06
  18. spy++获取supermemo菜单ID
  19. Telemetry 标准日志接口如何提升运维效率?
  20. 【多元统计分析与R语言】【详解】使用教材P84页表3-2进行多元数据简单R分析:定量变量的分析(直方图、散点图)、定性变量的分析并绘制绘制均值条图、箱尾图、星相图、调和曲线图

热门文章

  1. 《HTTP权威指南》– 5.Web服务器
  2. fix issues
  3. 解决fstream不能打开带有中文路径文件的问题
  4. ROS学习(九):ROS URDF-link
  5. 使用 Portainer UI 管理 Docker 主机
  6. 3星|《数据思维:从数据分析到商业价值》:有趣的数据分析案例
  7. 云服务时代,你是否没穿内裤在到处逛啊!
  8. 2199. [HZOI 2016] 活动投票
  9. Python 学习笔记 - socket(基本原理和流程)
  10. 项目乱码 GBK转UTF-8工具