1、Java基础知识

一、Java基础

第1阶段:Java基本语法

1、变量与运算符

八大基本数据类型?

整型:byte short int long

浮点型:float double

字符型:char

布尔型:boolean

2、流程控制语句

if-else   switch   

while   do-while 

3、数组

第2阶段:Java面向对象编程

1、成员变量和局部变量

a.定义位置不同:

成员:类中方法外

局部:方法中或者参数位置

b.初始化值不同

成员:有默认值

局部:没有默认值

c.作用范围不同

成员:作用于整个类

局部:只作用于方法内部

d.内存位置不同

成员:在堆中,跟着对象走

局部:在栈中,跟着方法走

e.生命周期不同

成员:随着对象的创建而创建,随着对象的消失而消失

局部:随着方法的调用而产生,随着方法的调用完毕而消失

静态成员&私有成员

静态成员:生命周期和类一样,属于类成员,不属于某个对象,类名直接调用

私有成员:外界不可以直接调用,对外提供get、set方法、构造方法赋值

2、面向对象的三大特性?展开说说

(1)、封装:隐藏内部细节,对外提供接口

(2)、继承:子类继承父类,可以直接使用父类中非私有成员,子类不用写重复性代码,extends关键字

成员变量访问特点:看等号左边是谁,先调用谁中的成员变量,子类没有找父类

成员方法访问特点:看new的是谁,先调用谁中的方法,子类没有找父类
注意:子类重写父类方法之后,权限必须要保证大于等于父类权限(权限指的是访问权限)

public -> protected -> 默认 -> private
继承中构造方法的特点

1.注意:new子类对象时,会先初始化父类(先走父类无参构造方法)

2.原因:每个构造方法的第一行,默认都会有一个super(),不写jvm自动提供一个,super()代表的是父类无参构造

3.注意:不管是super还是this,只要在构造中使用,都必须在第一行,所以二者不能同时手写出来

 

(3)、多态:继承、重写

多态前提下,不能直接调用子类特有成员

new对象:父类引用指向子类对象

Fu fu = new Zi();

//多态形式new对象
Animal animal = new Dog();
animal.eat();//重写的 animal接收的是dog对象,所以调用的是dog中的eat
//animal.lookDoor();   多态前提下,不能直接调用子类特有成员

看new的是谁,先调用谁中的成员方法,子类没有,找父类

优点:扩展性强

public static void method(Animal animal){//Animal animal = dog   Animal animal = cat
    animal.eat();
}
向上转型
父类引用指向子类对象  Fu fu = new Zi();
向下转型
向下转型:好比强转,将大类型强制转成小类型

3、接口与抽象类的区别

抽象类可以只有普通方法或者抽象方法;子类继承父类之后,需要重写父类中所有的抽象方法,不然编译报错;抽象类中可以有成员变量,构造,成员方法,有构造方法,是供子类创建对象时,初始化父类属性使用的

接口的方法都没有方法体

jdk8:

默认方法:public default 返回值类型 方法名(形参){}

静态方法:public static 返回值类型 方法名(形参){}

jdk9开始:

私有方法:

private的方法
相同点:
  a.都不能new
  b.都包含抽象方法,其子类或者实现类都必须重写这些抽象方法
      
不同点:
  a.抽象类:一般作为父类使用,可以有成员变量,构造,成员方法,抽象方法等
  b.接口:成员单一,一般抽取接口,抽取的都是方法,视为功能的大集合
  c.类不能多继承,但是接口可以

4、重载与重写的区别

重写是子类重写父类方法,用override关键字

重载是方法名字相同,参数个数、顺序、类型不同,与返回值和访问修饰符没有关系

第3阶段:Java高级应用

异常处理

1、编译时异常
a.编译时报错
b.处理方法:
try-catch:显式捕获异常并处理
throws:抛出异常,让方法的调用者负责处理
c.Exception的子类中,除了RuntimeException及其子类之外,其他都属于编译时异常
2、运行时异常
a.程序运行期间由JVM抛出的异常
b.常见类型:
NullPointerException(空指针异常)
IndexOutOfBoundsException(索引越界异常)
c.运行时异常是由程序逻辑错误导致的

多线程

一、创建线程的几种方式
继承Thread类
实现runnable接口
实现callable接口
线程池
tips:
yield():礼让线程
join():插队线程
二、线程的状态
新建、运行、阻塞、终止、等待
三、线程池
七大参数
核心线程、最大线程、空闲时间、单位、线程工厂、拒绝策略、任务队列

常用类和基础API

String
一、实现原理
a.底层是被final修饰的byte数组 private final byte[] value;
[value的引用地址不可变,但是value数组里面的数据元素其实是可变的。value的引用地址会分配在栈中 ,而其对应的数据是在常量池中保存的,常量池中数组本身的数据元素可变]
b.String类用final关键字修饰,说明String不可被继承
二、String的方法
1.判断方法
boolean equals(String s) -> 比较字符串内容
2.获取功能
int length() -> 获取字符串长度
String concat(String s)-> 字符串拼接,返回新串儿
char charAt(int index) -> 根据索引获取对应的字符
int indexOf(String s) -> 获取指定字符串在大字符串中第一次出现的索引位置
String subString(int beginIndex) -> 截取字符串,从指定索引开始截取到最后,返回新串儿
3.转换功能
String replace(CharSequence c1,CharSequence c2)-> 替换字符
                 CharSequence->String的接口
4.分割功能
String[] split(String regex)->按照指定的规则分割字符串
  注意:regex写的是正则表达式 -> . 在正则表达式中代表任意一个字符
5.其它
String trim() -> 去掉字符串两端空格
boolean contains(String s) -> 判断老串儿中是否包含指定的串儿
boolean endsWith(String s) -> 判断老串儿是否以指定的串儿结尾
boolean startsWith(String s) -> 判断老串儿是否以指定的串儿开头
String toLowerCase()-> 将字母转成小写
String toUpperCase() -> 将字母转成大写
三、String、StringBuffer、StringBuilder
String:拼接字符串效率低,每拼接一次,都会产生一个新的字符串对象,耗费内存资源
StringBuilder,底层自带一个缓冲区(没有被final修饰的byte数组)拼接字符串之后都会在此缓冲区中保存,在拼接的过程中,不会随意产生新对象,节省内存
StringBuffer:效率比较低,线程安全
StringBuilder:拼接效率比StringBuffer高、线程不安全
补充:
StringBuilder append(任意类型数据) -> 字符串拼接,返回的是StringBuilder自己
StringBuilder reverse()-> 字符串翻转,返回的是StringBuilder自己
String toString() -> 将StringBuilder转成String-> 用StringBuilder拼接字符串是为了效率,为了不占内存,那么拼完之后我们后续可能会对拼接好的字符串进行处理,就需要调用String中的方法,所以需要将StringBuilder转成String 
四、装箱&拆箱

集合框架

f044a9bdb33444aaa34facbd28d15bf2.png

6722fd48595a47c9918e296d4cc122d9.png

 

泛型

数据结构与集合源码

File类与IO流

网络编程

反射机制

JDK8-17新特性

算法:

1、二分查找

public int binary(int[] arr,int target){

    int left=0;
    int right=arr.length-1;
    int mid; 
    while(left<=right){
        mid=(left+right)/2;
        if(target<arr[mid])
        {
            right=mid-1;
        }else if(target>arr[mid]{
            left=mid+1;
        }else{
            return mid;
        }
    }
    return -1;

}

二、冒泡排序

public void sort(int[] arr)
{
    for (int j = 0; j < arr.length-1; j++) {
            /*
              内层循环代表每一圈比较的次数
              每圈都少比较一次
             */
            for (int i = 0; i < arr.length-1-j; i++) {
                if (arr[i]>arr[i+1]){
                    int temp = arr[i];
                    arr[i] = arr[i+1];
                    arr[i+1] = temp;
                }
            }
        }
}

 

 

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值