Java基础知识学习

Idea快捷键:

Main 打印main函数
.fori for循环
.forr 倒序for循环
sout 输出函数
集体单行注释:ctri+/
多行注释:ctri+shift+/

static:

Static修饰成员变量:如果有数据需要被共享给所有对象使用时,那么就可以使用static修饰。
Static修饰成员方法:调用时不需要通过对象 通过方法即可
静态方法不能直接使用非静态变量
静态方法不能使用this,因为this指的是当前对象,但静态指的是所有对象

Arrays中常用两个方法

tostring 和 sort(可对数字和字符串)

继承和多态:


1.继承


继承主要解决的问题:共性抽取
使用extends
一个类的直接父类只能有一个

区分子类方法中重名的三类变量:
局部变量:直接写变量名
本类的成员变量:this.成员变量名
父类的成员变量:super.成员变量

重载(overload):方法名一致,参数列表不一样
重写(override):方法名和参数列表都一样
重写中,子类方法的返回值必须小于等于父类方法的返回值范围
object是所有类的公共最高父类
子类方法的权限必须大于等于父类方法的权限
public>protected>default(什么都不写)>private
一般来说,方法的返回值范围和权限都是相等的

父子类构造方法的访问特点:
子类必须调用父类的构造方法,不调用则系统自动赠送(super)
子类构造可以通过super关键字调用父类有参数的构造函数
super只能有一个,且必须是子类构造方法的第一个语句

this关键字的用法:
在本类的成员方法中,调用本类的成员变量或者另一个成员方法


2.抽象类


概念:如果父类当中的方法不确定如何进行{}方法体实现,那么这就应该是一个抽象方法
抽象方法:加上abstract关键字,去掉大括号,直接分号结束。
抽象类:在class前加入abstract
抽象方法所在的类必须是抽象类
抽象类中可以有普通成员方法

抽象方法和抽象类的使用

1.不能直接创建抽象类对象
2.必须用一个子类来继承抽象父类
3.子类必须覆盖重写抽象父类中的所有抽象方法
4.覆盖重写时,子类需要去掉abstract关键字,然后加入大括号,写入自己需要的功能
5.覆盖重写时,最好在前面加上@override ,显得专业
6.覆盖重写时,可以直接鼠标点击extends后面的父类名称,按alt+回车


3.接口


1.如何定义一个接口:
public interface 接口名称 {
//接口内容
}
2.接口中内容:
1.常量
2.抽象方法
3.默认方法
4.静态方法
3.接口中的抽象方法
1.接口中的抽象方法,修饰符必须是两个固定的关键字:public abstract
2.这两个关键字可以选择性省略
3.接口不能直接使用,必须有一个实现类来实现此接口
格式: public class 实现类名称 implements 接口名称{
//。。。

}
4.接口的实现类必须覆盖重写接口中所有的抽象方法
4.接口中的默认方法
1.格式: public default 返回值类型 方法名称 (参数列表){

}
2.接口中的默认方法,可以解决接口升级的问题:在已有接口中添加新内容,不影响已有实现类的使用
3. 接口的默认方法可以被接口的实现类直接调用,即:调用默认方法,如果实现类里面没有,会向上找接口
4. 接口的默认方法可以被接口的实现类覆盖重写
5.接口的静态方法:
1.格式:将abstract或者default换成static即可
2.不能通过接口实现类的对象来调用接口中的静态方法
3.实现方法:接口名称.静态方法名(参数)
6.接口中常量
1.必须用public static final修饰
2.final如果引用为基本数据类型,则该引用为常量,该值无法修改(不止在接口中);
3.接口名称调用
4.接口中的常量必须赋值
5.常量的名称一般用完全大写,用下划线进行分割(shift+f6),如:NUM_OF_MYCLAS
7.一个类可以同时实现多个接口,如
在这里插入图片描述
需要覆盖重写里面全部的抽象方法


4.多态


1.多态的概述

针对对象:既有父类又有子类(既有接口又有实现类)
代码中体现:父类引用指向子类对象,即父类名称 对象名 = new 子类对象(),右侧创建一个子类对象,把它当做父类来看待使用
2.多态的优点
在这里插入图片描述

3.访问成员变量的两种方式:
1.直接通过对象名称访问成员变量:看等号左边是谁就优先用谁,没有则向上找
2.间接通过成员方法访问成员变量:看该方法属于谁就优先用谁,没有则向上找(子类没有覆盖重写就是父,子类覆盖重写就是子)
4.访问成员方法的规则
看new的是谁就优先用谁,没有就向上找
成员方法:编译看左边 运行看右边
5.向下转型
对象一旦向上转型为父类,就无法调用子类原本特有的内容了,因此需要向下转型来还原
在这里插入图片描述
6.instance关键字
怎样才能知道一个父类的引用对象,本来是什么子类?
格式:
对象 instanceof 类名称
在这里插入图片描述


5.final关键字


1.概念与四种用法

final代表最终、不可改变的
常见四种用法:
1.修饰一个类
2.修饰一个方法
3.修饰一个局部变量
4.修饰一个成员变量

final修饰一个类

格式:
public final class 类名称{

}

含义:当前类不能有任何子类

final修饰一个成员方法

格式:
修饰符 final 返回值类型 方法名称(){

}

含义:不能被子类覆盖重写

final修饰局部变量

此时局部变量不能被重新赋值 即只能有一次赋值

final修饰成员变量

final关键字修饰成员变量 成员变量也不能再被改变
注意:用final修饰成员变量时必须对成员变量赋值(因为成员变量不赋值的话默认为0)


6.四种权限修饰符


在这里插入图片描述


7.内部类


1.内部类的概念

整体和部分的关系
分类:1.成员内部类 2.局部内部类

2.成员内部类

格式:你懂得
注意:外部类调用内部类 需要内部类对象
调用成员内部类有两种方式:
1.间接:在外部类方法当中建立内部类对象,进而调用内部类方法
2.直接:外部类名称.内部类名称 对象名 = new 外部类名称().new 内部类名称()

如果外部类和内部类出现了同名的变量,那么格式是:
外部类名称.this.外部成员变量名
在这里插入图片描述
3.局部内部类
概念:类定义在方法内部
具体使用没细看

4.随机发红包启示

方案1:前一个红包在总金额里面随机取,下一个红包在剩余金额中随机抽取
方案2:方案1可能导致某一个红包数额特别大,因此最大金额设置为(LeftMoney/LeftPerson)*2,即剩余金额平均值的2倍,在0.01到最大金额中间抽取

常用api

object类

1.tostring方法:打印对象的地址或者成员变量(使用generate中equal and hashcode重写),个人感觉没有意义
2.equal方法:未重写时,比较两个对象的地址值,没有意义
重写之后(使用generate中equal and hashcode)比较构造方法中的参数是否相同,相同则返回true

date类

  1. 计算时间的方法没有仔细看,用时百度即可
  2. DateFormat类:1.格式化日期(日期到文本) 2.解析(文本到日期)
  3. 在这里插入图片描述
  4. List item
  5. 计算两个日期之间间距多少天

解析:
在这里插入图片描述
解答:
在这里插入图片描述

Stringbuilder类

可以看做可变的字符串,主要用于字符串相加,可以提高字符串的操作效率

使用方法:

  1. StringBuilder sb = new StringBuilder (字符串参数)
  2. append方法:添加数据,sb.append(“abc”)
  3. tostring方法:转向String

包装类

对应创建Arrylist时<>里的内容

在这里插入图片描述


集合


**

Collection集合

**

集合与数组的区别

  1. 数组长度不可变,集合长度可变
  2. 数组可以存储基本元素,也可以存储对象;集合只能存储对象

集合框架
在这里插入图片描述
详细框架

在这里插入图片描述
集合常用功能
在这里插入图片描述
Iterator迭代器

collection集合中没有索引,所以要遍历的话需要迭代器

迭代器是通用的取出集合中元素的方式

工作方式:在取出元素前先判断集合中是否还有元素,如果有就取出来,继续再判断,如果有就继续取出来

常用方法:

  1. boolean hasnext() :如果有元素可以迭代,那么返回true
  2. E next () 返回迭代的下一个元素

迭代器的使用步骤:

在这里插入图片描述
增强for循环

专门用来遍历数组和集合,不能对元素进行增删操作


泛型


概念:可以看做一种未知的数据类型,不知道用什么数据类型的时候,可以用泛型
创建集合对象的时候,就会确定泛型的数据类型
如:
在这里插入图片描述
把数据类型作为参数传递,把String赋值给E

泛型的定义和使用

定义含有泛型的类:
在这里插入图片描述
使用含有泛型的类:

在这里插入图片描述
定义含有泛型的方法:

在这里插入图片描述
使用含有泛型的方法:很简单,不需要在前面加<>,传入的是什么参数泛型就是什么类型

斗地主案例

启示:

  1. 洗牌时,可以用shuffle方法来打乱集合中元素的位置
  2. 发牌时,可以用索引对3取模,即%

list接口


特点:

  1. 有序
  2. 有索引
  3. 允许重复元素

常用方法:在这里插入图片描述ArrayList集合

特点:增删慢,查询快

LinkedList集合

特点:

  1. 增删快,查询慢
  2. 是链表组成的集合,有很多在头和尾处理的方法
  3. 常用方法:在这里插入图片描述

set集合


特点:

  1. 不允许重复元素
  2. 没有索引,不能用for循环遍历(用迭代器遍历)
  3. 无序,存储顺序和取出顺序可能不一致
  4. 底层是哈希表,查询速度非常快

collections集合工具类的方法


常用方法
在这里插入图片描述
使用:

  1. List item
  2. List item
  3. sort方法:
    1.默认升序排序
    2.要排序自定义的对象(如按年龄对person(age,name)进行排序时),需要实现Comparable接口,重写接口中的方法comparableTo定义排序规则
    在这里插入图片描述在这里插入图片描述

3.升序:this - o
降序:o - this

  1. sort方法第二个参数也可实现对person的排序(更简单)
    o1-o2 升序,反之降序
    在这里插入图片描述

Map集合


  1. 存储键值对
  2. key不能重复,value可以重复
  3. key和value数据类型可以不同

常用方法

在这里插入图片描述

  1. put方法:在这里插入图片描述
  2. remove方法:在这里插入图片描述
  3. get方法:在这里插入图片描述
  4. 遍历MAP集合的方法:keySet、entrySet(用时再学)

异常和多线程



异常


异常的处理方式

关键字:try、catch、finally、throw、throws

throw关键字:

使用throw关键字在指定的方法中抛出指定的异常
使用格式: throw new ***Exception(“产生异常的原因”)
注意:

  1. 必须写在方法内部
  2. new的对象必须是Exception或者Exception的子类对象
  3. 抛出异常 我们就必须处理这个异常
  4. new后面是RuntimeException或者其子类对象时,可以不处理
  5. 创建的是编译异常时(写代码的时候报错),我们就必须处理这个异常,要么throw 要么try catch

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值