JavaSE学习的一些写总结20201015

前言

这些天打算把以前学习的一些知识从头开始做一下总结,有些不清楚的地方自己还要再去深入了解复习,事件可能会比较长,但也要坚持,如果有不对的地方欢迎大佬们的指正。

Java语言能做什么

java语言主要应用于互联网服务的开发领域,像天猫、淘宝、京东、物流等,还可用于后台服务器的数据的存储、查询、数据挖掘等;

Java语言跨平台的原理

java虚拟机(JVM)

  • JVM(Java Virtual Machine):java虚拟机,我们编写的java程序都是在JVM上运行
  • 跨平台:热播和软件运行都要在操作系统上,java编写的软件可以运行在任何的操作系统上,该特性由JVM实现,不同操作系统使用不同JVM ,允许跨平台的是java程序,不是虚拟机
  • JRE(Java Runtime Environment):是java运行时的环境,包含了JVM和java运行是的所需的核心类库
  • JDK(Java Development Kit)是java程序的开发工具包,包含JRE开发工具
    JDK>JRE>JVM

数据类型

  • 数据类型分类
    java数据类型非为两大类
  • 基本数据类型:整数、浮点数、字符、布尔
  • 引用数据类型:类、数组、接口、枚举

基本数据类型

四类八种基本数据类型

数据类型关键字内存占用取值范围
字节型byte1个字节-128至127
短整型short2个字节-32768至32767
整型int4个字节
长整型long8个字节
单精度浮点数float4个字节
双精度浮点数double8个字节
字符型char2个字节
布尔 型boolean1个字节true、false
  • 强制数据类型转换
    数据类型 变量名 = (数据类型)被转数据值

逻辑运算符

  • 短路逻辑运算符
    && :短路与
    如果左边为真,右边执行,如果左边为假,右边不执行
    || :短路或
    如果左边为加,右边执行,如果左边为真,右边不执行

三元运算符

关系表达式? 表达式1:表达式2;

数组

初始化

  • 静态初始化
    数据类型[ ] 数组名 = {数组元素};
  • 动态初始化
    数据类型[ ] 数组名 =new 数据类型[数组长度];
    数组的索引从0开始

方法的重载

同一个类中,方法名相同,参数列表不同即可方法重载

面向对象

  • 类和对象的理解
    类:类是对事物的一种描述,类中包括了事物的一些共有的属性和行为
    对象:对象是具体存在的事物,是类实例化的一种体现

  • 封装
    private关键字
    封装是用privat来修饰成员,封装使得外部无法随意对类的成员变量赋值或者调用成员变量,保证了一定的安全性,把代码用方法进行封装,提高了代码的复用性
    this关键字
    当成员变量和局部变量重名是,使用this关键字来修饰成员变量,this指代当前对象
    this就是一个对象
    1.成员方法中的this就是调用当前方法的对象
    2.构造器中的this,就是当前new的对象
    构造器
    构造方法的作用是用来创建对象
    完成对象的初始化
    创建类是或默认赠送一个无参构造,也可自定义有参或满参构造,只要自己定义了就不会附赠无参构造
    对成员变量封装
    1.使用private关键字修饰成员变量
    2.给私有的成员变量提供访问方法:getter,setter

String类

创建字符串对象的两种方式的区别

  • 通过构造方法创建
    通过new创建对象,每次new都会申请一个内存空间,虽然内容相同,但是地址不相同
  • 直接赋值
    直接赋值,无论在代码中出现多少次,JVM都只会建立一个String对象,并在字符串池中维护

字符串的比较

比较基本数据类型:比较具体的值
比较引用数据类型:比较的是对象的地址
具体值的比较用**==号**
字符串的额比较用equals方法

StringBuilder类

  • StringBuilder是一个可变的字符串类,我们可以把它看成一个容器,其中的内容是可变的

StringBuilder类的构造方法

  • public StringBuilder()
  • public StringBuilder(String str)利用此方法可将字符串转换为StringBuilder

StringBuilder与String的转换

  • StringBuilder可以利用toString()方法
  • String利用带参数构造方法就可以

ArrayList类

  • 底层是数组实现的,长度可以变化List item
  • 使用泛型约束集合中存储的元素的数据类型

成员方法

方法名说明
public boolean remove(Object o)删除指定的元素,返回删除是否成功
public E remove(int index)删除指定的元素,返回删除的元素
public E set(int index,E element)修改指定索引处的元素,返回被修改的元素
public E get(int index)返回指定索引处的元素
public E size()返回集合中的元素的个数
public boolean add(E e)将指定的元素追加到此集合的末尾
public void add(int index,E element)在此集合中的指定位置插入指定的元素

匿名对象

概念:没有名字的对象就是匿名对象
一次性使用,不须用对象名接收
格式: new 类名(参数)

继承

  • 面向对象的三大特性:封装,继承,多态
    【概念】
    用一个子类继承父类,子类就能拥有父类的成分
    【好处】
    1.提高代码的复用性
    简化代码,多个勒种重复的成分定义到父类,子类只要定义特有的成分
    2.让类与类之间产生is a的关系,是多态的前提
    注意:
    1.继承一定是两个类之间的关系
    2.子类继承父类后拥有父类的成分
    3.java中只支持单继承

  • 子类中不能继承的成分
    1.私有化的成员变量,可以继承但不能直接访问, 需要借助getter,setter方法
    2.构造方法无法继承到子类,但可以使用

- 继承后的特点

  • 成员变量
    子类和父类中的变量没有冲突的, 子类可以直接使用父类的非私有成分
    如果有冲突,优先访问本类,如果没有在访问父类

当方法中的局部变量,本类中的成员变量,父类中的成员变量冲突了,解决方案

1.局部变量是直接访问的
2.本类的成员变量是借助this
3.父类的成员变量是借助super

  • 成员方法
    成员方法的访问同成员变量

  • 构造器
    1.不会继承到子类中,但子类可以使用父类的构造方法
    2.如何访问
    1)只能在子类构造方法的第一句进行访问(默认存在一个父类的无参构造)
    如何使用
    借助super关键字
    小结
    this和super使用小结

  • 子类的每个构造方法中均有默认的super(),调用父类的空参构造。手动调用父类构造会覆盖默认的super()。

  • super() 和 this() 都必须是在构造方法的第一句,所以不能同时出现。

  • super(…)和this(…)是根据参数去确定调用父类哪个构造器的。

  • super(…)可以调用父类构造器初始化继承自父类的成员变量的数据。

  • this(…)可以调用本类中的其他构造器。

方法的重写

快捷键ctrl+O
【注意事项】

  1. 方法重写是发生在子父类之间的关系。
  2. 子类方法覆盖父类方法,必须要保证权限大于等于父类权限。
    一般的做法就是保证权限一致,
    public > protected > [缺省] package-private > private
  3. 子类方法覆盖父类方法,返回值类型、函数名和参数列表都要一模一样。

重写参考规则:方法声明不变,方法体逻辑重新实现。

抽象类

概述

抽象方法:只有方法的声明,没有方法的具体实现
抽象类:一种特殊的类,可以包含抽象方法
【关键字】 :abstract 表示抽象

  • 注意事项
    1.非抽象类不能有抽象方法
    2.抽象类不能创建对象,需要子类继承,由子类创建子类对象
    3.子类要重写抽象类的抽象方法,如果没有重写抽象类的全部抽象方法那么子类也必须是抽象类
  • 抽象类的存在意义
    1.为子类提供一个模板,父类中有的抽象方法一定要实现,或者自己也变成抽象方法
    2.为子类提供一种约束,一种模板

设计模式:模板设计模式

  • 1.设计模式:某一种特定需求的最佳代码实践。这种代码是一种通用的思想,从而提炼成为一种模式。
  • 2.在定义模板方法时,将不确定的逻辑定义成抽象方法。让子类具体去实现。
  • 3.可以看出,模板模式的优势是,模板已经定义了通用架构,使用者只需要关心自己(子类)需要实现的功能即可!非常的强大!

Static关键字

  • 被static修饰过的成员,成为类成员,随着字节码文件的加载到内存而存在。
  • 没有被static修饰过的成员是属于对象的成员, 随着对象被创建而存在。

静态变量

  • 静态变量也叫类变量,成员变量被static修饰过后就是类变量,类变量被所有的该类对象所共有。
  • 静态变量的使用
    静态变量可以直接被类名调用,也可以被该类对象调用(建议使用类名直接调用)
    格式:类名.静态变量

静态方法

类方法也称静态方法
定义格式: public static 返回值类型 方法名(参数列表){方法体}

  • 调用方法
    同静态变量调用,推荐类名直接调用
    注意事项
    1.静态方法只能访问该类的静态变成员
    2.静态方法中不能存在this
    3.非静态方法可以访问所有成员

权限修饰符

  • public
    公共的,本项目中任何地方都可访问
  • protected
    受保护的,同一个包中或者不同包的子类可以访问
  • 缺省(package-private)
    包私有,只能在该包中访问
  • private
    私有的,只能在本类中访问

使用特点

  • 类的权限
    只能使用public ,或者包私有
  • 成员变量
    根据需要而定
  • 构造方法
    一般使用public,也可根据需要而定,如工具类的构造方法使用private修饰
  • 成员方法
    一般使用public修饰,也可根据自己需求而定

final关键字

final关键字也是修饰符,表示最终的。可以用来修饰类,方法,变量

  • 修饰类,类就不能有子类
  • 修饰方法,子类不能重写
  • 修饰变量,变量就称为常量,只能赋值一次。

代码块

类中方法外

  • 构造代码块
    在类中方法外出现的一种代码块,用于辅助对实例进行初始化
    构造代码块会在每次构造方法执行前执行一次

  • 静态代码块
    静态代码块,用于类加载到内存后,对类的静态成分进行初始化
    在类加载到内存后,执行一次,类加载到内存只会执行一次,静态代码也只会执行一次

  • 局部代码块
    在某些局部位置,方法内,构造方法内,构造代码块内,静态代码块内的{}就是局部代码块

接口

  • ** interface关键字**
    接口也是一种引用数据类型,类中可以定义各种成分(属性,构造方法,成员方法,常量……)接口主要用来定义方法,也可以用来定义 常量。

  • 接口可以定义的方法
    1.在JDK7以前,只能定义的抽象方法
    2.在JDK8开始,新增了默认方法,静态方法
    3.JDK9开始,新增加了私有方法

  • 接口中定义常量
    默认就是公共的,静态常量,直接接口名调用即可
    public static final 类型名 常量名 = 值

  • 接口的抽象方法

  • 接口没有构造方法,而且接口是抽象的,接口不能直接实例化对象(类似于抽象类)。

  • 使用时需要定义一个子类去实现接口(实现类似于继承意义是一样的)

  • 实现所用的关键字:implements (意义与extends一样的可以表示继承)

  • 接口是支持多实现

【抽象方法的使用】

  • 如果接口中存在抽象方法,子类实现接口的时候需要将所有的抽象方法重写,否则子类需要变成抽象类。
  • 默认方法
    默认方法不是抽象的,是具体的,需要借助default关键字
  • 默认方法的使用
  • 默认方法在接口中,不能创建对象使用,只能依靠子类来使用
  • 子类实现含有默认方法的接口,可以对默认方法进行重写,也可以直接继承使用
  • 静态方法
  • 和类中的public静态方法是一样
  • 直接用接口名调用

接口的多实现

  • 类可以继承一个父类同时实现多个接口,注意:继承要写在实现的前面
    public interface A{}
    public interface B{}
    public class C{}
    public class D extends C implements A,B{}

【在多实现中方法使用注意】

  • 如果多个接口中存在多个抽象方法,要重写所有的抽象方法。相同的重写一次
  • 如果多个接口中存在多个默认方法,默认方法可以重写,也可以直接使用,如果有相同必须要重写。
  • 静态方法,私有方法和子类没有关系,不会冲突。

父接口和父类方法优先问题

结论:如果一个类的父类和父接口中存在有相同的方法,优先使用父类的方法

原因:父类会通过子类去重写父接口的方法

接口的多继承

  • 类和类:继承 extends 【单继承】

  • 类和接口:实现 implements【多实现】

  • 接口和接口:继承 extends 【多继承】

  • 接口的多继承相当于 将多个父接口的功能集中在子接口中。

【使用注意】

当多个父接口中存在相同默认方法时,子接口一定要进行重写

多态

多态:多种形态

  • 同一个方法不同具体类型执行会有不同的结果体现
  • 对象也可以有多型

多态的前提

  • 继承或者实现【决定性条件】
  • 需要使用父类型接收子类对象【格式体现】
  • 方法的重写【意义体现】

多态的害处和弊端

  • 好处
    利用父类型接受子类对象的特性,可以设计一个扩展性强的方法,做形参可以接收任意子类传入的对象。做返回值亦如此
  • 弊端
    无法调用子类特有方法
    多态代码中,只能执行父类型中存在的方法,如果调用了方法,使用的是子类中重写的方法,如果子类没有重写,动态向父类中查找

接口多态

  • 接口多态和继承多态用法一样。格式上的区别在于使用父接口接收子类对象。

内部类

成员内部类

当描述一个事物时,内部还有一个事物需要描述。

例如:汽车和引擎,人和心脏
【成员内部类的访问】
访问特点:

  • 成员内部类是可以直接访问外部类所有成员(包含私有的)
    内部类默认存在一个外部类对象(外部类.this)
  • 外部要访问内部类,就必须建立内部类对象

从外部访问内部类成员

如果要访问成员内部类的成员,一定要创建对象

创建内部类对象的格式:
外部类名.内部类名 对象名 = 外部类对象.new 内部类();

匿名内部类

如果要写匿名子类,一定要先提供一个父类或者父接口。
new 父类/父接口(){
//如果父类型有抽象方法,强制要重写所有的抽象方法
};
格式:

  1. 体现了一个对象,这个对象就是该父类型的子类对象
  2. 体现了一个类,要求重写父类型中所有的抽象方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值