Java中的代码块

  java中的代码块是用{}括起来的代码,进行一些功能的限定

  • 静态代码块:在类第一次被初始化的是后执行,负责一些类的初始化操作,仅仅只执行一次
  • 构造代码块:顾名思义,辅助构造器进行初始化操作,每次构造器执行前先执行构造代码块
  • 局部代码块:在方法内部的代码块,主要用来限制变量的生命周期
  • 同步代码块:局部代码块的一种,在方法内部进行同步控制

和类初始化相关的构造方法执行顺序:静态代码块 > 构造代码块 > 构造方法

public class FanXing {
//静态代码块
static {
System.out.println("静态代码块一执行了!");
}
static {
System.out.println("静态代码块二执行了!");
}
//构造方法
public FanXing() {
System.out.println("构造方法执行了!");
}
//构造代码块
{
System.out.println("构造代码块一执行了!");
}
{
System.out.println("构造代码块二执行了!");
}
public static void main(String[] args) {
FanXing f = new FanXing();
//局部代码块
{
System.out.println("局部代码块执行了");
}
}
}

执行结果为:

静态代码块一执行了!
静态代码块二执行了!
构造代码块一执行了!
构造代码块二执行了!
构造方法执行了!
局部代码块执行了

继承

  我们一定要知道一般情况下继承是为了方法的重写,而不是为了功能的扩展,功能的扩展用接口实现,java中只有单继承和多重继承,没有多继承(接口有多继承,这也在一定程度上弥补了接口单一原则的弊端,继承提高了代码的复用性和维护性,让类与类产生了一个关系,是多态的前提。

  但是任何事物都有两面性,继承也有不好的一面的,我们写程序都追求低耦合好内聚,意思就是尽量让一个类独立完成自己的功能,不和其他类产生联系,这样不利用代码的扩展。甚至继承在一定程度上打破了封装性。

继承的注意事项:

  • 子类不能继承父类的私有成员,不能继承并不是没有该属性,只是不能直接调用,而我们通常的做法是,父类提供getXxx()和setXxx()方法或者子类通过super去调用父类的构造方法进行该私有成员的初始化。
  • 子类不能继承父类的构造方法,但是可以通过super去访问

多态

  同一个对象在不同时刻体现出来的不同状态。多态是在写代码时期由于无法确定该引用类型,用一种对象引用来表现多种对象,我们常见的传参是抽象类或者接口类型的其实都是多态,多态的前提:有继承或者实现关系,有方法重写,有向上转型。在多态中主要的是方法的重写,因为只有不同的“态”具有不同的方法内容,多态才有实际的意义。

  同样的多态也有弊端,对于向上转型,该对象不能调用子类特有的方法,调用前需要将此对象强转子类对象,也就是向下转型。

多态中的成员访问特点

  • 成员变量:编译看左边,运行看左边
  • 构造方法:子类的构造都会默认访问父类构造
  • 成员方法:编译看左边,运行看右边
  • 静态方法:编译看左边,运行看左边

多态中,例如:Person  s =  new Stiudent()无论什么属性在编译时都是先检验Person类中是否存在,而在运行时只有成员方法会调用Student类中的方法,其他的都是调用Person中的,所以说多态是基于方法重写的!

抽象类

  我们在继承的时候就知道了,有些方法在父类和子类中会有不同的实现,那么如果这个方法在父类中并不会有具体的实现,就仿佛多态在真正初始化之前是不知道什么类型的,所以这个方法在不被真正重写之前是不知道具体内容的,那么这个方法我们就可以用abstract修饰,来声明该方法此时没有具体的实现内容,需要子类不得不重写,这就是抽象方法,而一个类有了抽象方法,这个类就必须用abstract修饰来标注它是一个抽象类,

  abstract:作为一个修饰符,是抽象的标识,那么抽象往往 意味着和很多关键字冲突,比如说private static final,仔细想想那几个关键字的含义你便明白为什么了,其实abstract只能和俩个修饰符共存:protected和public,因为java中是这样说的:The abstract method fun in type FanXing can only set a visibility modifier, one of public or protected.

抽象类的特点

  • 抽象类和抽象方法必须用关键字abstract修饰
  • 抽象类中不一定有抽象方法,但是有抽象方法的类一定是抽象类
  • 抽象类不能实例化,即不能创建对象

接口

  如果我们说抽象类是共性的提取,那么接口就是特性的扩展,接口是用来给类扩展功能的,实现一个接口就 意味着扩展该接口中的方法

接口的特点

  • 接口用关键字interface修饰
  • 接口中的方法一定是抽象方法,也就是用public abstract修饰
  • 接口中的成员变量一定是静态的常量,也就是用public static final修饰
  • 接口不能实例,接口中没有构造方法,这里区别于抽象类中,因为抽象类是类,其子类对象是需要调用父类的构造器
  • 接口和接口之间可以多继承,即一个接口同时继承多个接口。

java基础知识总结(二)的更多相关文章

  1. java基础知识(二)-----多态和构造函数

    一:前言 最近由于面试了新浪公司,面试官问我的问题我都不知道,觉得自己好菜,所以最近决定再把java基础给搞一遍,真的觉得自己好菜.每天看一点,那个家伙说<java编程思想>最少要看三遍, ...

  2. Java基础知识(二)

    一.基本概念 1. Java程序初始化的顺序是怎么样的 2. Java和C++的区别 3. 反射 先看一个知乎回答 什么是反射 主要用途 获得Class对象 4. 注解 什么是注解 为什么要用注解 基 ...

  3. Java 基础知识总结 (二、基本数据类型)

    二.基本数据类型 java基本数据类型只能先声明后使用 boolean  true/false char 16-bit unicode character byte 8-bit integer sho ...

  4. Java基础知识陷阱(二)

    本文发表于本人博客. 上次说了一些关于字符串的知识,都是比较基础的,那这次也说下关于对象地址问题,比如传参.先看下面代码: public void changeInt(int a){ a = ; } ...

  5. Java测试开发--Java基础知识(二)

    一.java中8大基本类型 数值类型:byte.short.int .float.double .long 字符类型:char 布尔类型:boolean 二. 封装:将属性私有化,不允许外部数据直接访 ...

  6. java基础知识(二)字符串处理

    字符串是程序开发中使用最为频繁,因此为了工作的高效和作为一名想进阶的程序员,了解并掌握字符串的处理显得尤为重要.java为我们提供了String.StringBuffer.StringBuilde三个 ...

  7. java基础知识拾遗(二)

    1.finally public static int func (){ try{ return 1; }catch (Exception e){ return 2; }finally { retur ...

  8. java基础知识总结二

    1. synchronized和reentrantlock异同 相同点 都实现了多线程同步和内存可见性语义 都是可重入锁 不同点 实现机制不同 synchronized通过java对象头锁标记和Mon ...

  9. java基础知识总结(二)

    +=隐含了强制类型转换. x+=y;等价与:x = (x的数据类型)(x + y); 函数重载? 函数名同样.參数列表不同.跟返回值不关,就是函数重载 封装是什么? 隐藏对象的属性和详细的实现细节,仅 ...

  10. Scanner、String(java基础知识十二)

    1.Scanner的概述和方法介绍 * A:Scanner的概述 * 是一个从键盘输入的类,有final修饰,不能被子类继承 * Scanner sc = new Scanner(System.in) ...

随机推荐

  1. Windows10内置ubuntu子系统安装后中文环境设置

    原文:Windows10内置ubuntu子系统安装后中文环境设置 第一开启相关设置,使用小娜(Win键+c)直接查找关键字打开更快.   ①设置→查找"针对开发人员"→开发人员模式 ...

  2. WPF 3D模型的一个扩展方法

    原文:WPF 3D模型的一个扩展方法 在WPF 3D中,我们常常需要改变一个ModelVisual3D对象的颜色. 先说说ModelVisual3D,本质上3D模型都是由一个个的三角形构成的,并且经过 ...

  3. ASP.NET Core 中间件 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 中间件 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 中间件 上一章节中,我们我们有讲到 Startup 类中的 Confi ...

  4. Codeforces 35E Parade 扫描线 + list

    主题链接:点击打开链接 意甲冠军:特定n矩阵(总是接近底部x轴) 然后找到由上面的矩阵所包围的路径,的点 给定n 以下n行给定 y [x1, x2] 表示矩阵的高度和2个x轴坐标 思路: 扫描线维护每 ...

  5. .net元数据

    概要 现在,在.net开发平台计划,其组成编译:IL代码.资源.程序集清单和类型元数据.我们知道,IL代码就是我们编写的代码.资源就是图片文件.xml文件,及其它文件,只有不清楚的是元数据(在这里将程 ...

  6. WPF 获得DataGridRow和 DataGridCell的方法

    原文:WPF 获得DataGridRow和 DataGridCell的方法 原文地址 简介 在WPF中,DataGrid控件并没有提供访问其DataGridRow或者DataGridCell的方法. ...

  7. Sqlite在.NET下的使用和Sqlite数据库清理

    原文:Sqlite在.NET下的使用和Sqlite数据库清理 Sqlite 是一款轻量级的关系型数据库,她的好处我就不详细道来了.本文的初衷是为.net平台的使用者提供帮助. Sqlite有专门为VS ...

  8. pdf密码解除工具

    PDF Password Remover 3.0下载地址: 链接:https://pan.baidu.com/s/1hAmcGB-vMxz79IGGskdzHQ 提取码:q6y8

  9. JavaScript严格模式分析

    简要:严格模式(strict mode)是JavaScript在ES5里面新增的编码模式,只要一行代码 就可开启,可谓 非常简单了,而它对于 我们的编码来说到底有什么不同呢? 一. 严格模式的目的? ...

  10. 如何将svg转换为xaml

    原文:如何将svg转换为xaml 1 下载Inkscape 2 用Inkscape打开svg,另存为xaml 注意:复杂的svg图转换完会出现类似下面的xaml,wpf/silverlight是无法解 ...