JavaBasicKnowledge

文章目录

1.方法

1.在定义方法的过程中,不能够将方法定义在方法里面。

2.方法名称区分大小写。

3.方法必须先定义后才可以调用,否则程序将会报错。

4.形参和实参

  • 形参:方法定义中的参数。
  • 实参:方法调用中的参数。

5.方法定义的注意事项:

  • 方法里面不能嵌套方法
  • void表示无返回值,可以省略return,也可以单独的书写return,后面不加数据。

6.方法的重载:指同一个类中定义的多个方法之间的关系,满足下列条件的多个方法,相互构成重载

  • 多个方法在同一个类中

  • 多个方法具有相同的方法名

  • 多个方法的参数类型不相同,类型不同或者数量不同

    方法重载与方法的返回类型无关,不能够通过方法的方法类型判断方法的重载
    在这里插入图片描述

7.方法的参数传递基本类型

  • 对于基本数据类型的参数,形参的改变,不会影响到实参数的值方法调用完后就出栈了,形参值的改变不影响实参的值

在这里插入图片描述

图中change方法调用完后已经出栈!

8.方法的参数传递引用类型

对于引用类型的参数,形参的改变,会影响到实参的值因为引用类型的内存地址不改变

在这里插入图片描述

2.面向对象

在这里插入图片描述

1.类:类是对现实生活中一类具有共同属性行为的事物的抽象,是对具有相同属性和行为的一组对象的集合
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.new单个对象内存图:

对象是存放在堆空间的,对象在堆里面会返回一个内存地址,方法存放在栈里(压栈),方法执行完后就会出栈(栈遵循先进后出原则)
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

代码System.out.println()输出一个对象输出的是一个地址,通过该内存地址找到该对象,进行对象的成员属性值的修改

3.成员变量和局部变量:

  • 成员变量:在类中方法外定义的变量就是成员变量
  • 局部变量:在类中方法里面定义的变量就是局部变量
  • 局部变量想使用的话必须先赋值才可以使用
  • 成员变量有默认初始化值,int类型的默认值就是0(例如this.成员变量)
  • 在方法里面传递的参数(形参),也属于该方法里面的局部变量

在这里插入图片描述

4.private修饰符:

在这里插入图片描述

5.get和set方法(前提是用private修饰符定义成员变量):

  • get方法:直接获取成员变量的值 获取的操作
  • set方法:就是给我们的成员变量赋值 赋值的操作

在这里插入图片描述

6.this关键字:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

7.构造方法:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

8.this使用细节

在这里插入图片描述

2.1封装

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.2继承

总结:继承就是继承父类的成员属性和方法,子类继承父类后可以调用父类的成员属性和方法,子类也可以继续拓展在定义新的成员属性和方法

在这里插入图片描述

在这里插入图片描述

继承的优缺点

在这里插入图片描述

继承中变量的访问特点

在这里插入图片描述

super关键字

在这里插入图片描述

super访问父类中构造方法

总结:每个子类构造方法的第一行代码默认都是:super(),只是没有显示出来

父类中没有无参构造方法的话就在子类用super方法调用父类中的有参构造方法解决

在这里插入图片描述

继承中成员方法访问特点

在这里插入图片描述

方法重写

注意事项:方法的 方法名称(参数列表) 必须与父类保持一致!

在这里插入图片描述

权限修饰符

在这里插入图片描述

在这里插入图片描述

方法重写注意事项

在这里插入图片描述

Java中继承注意事项

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

继承2

继承3

2.3多态

1.多态的基本概念

多态的3个前提条件需要注意

在这里插入图片描述

2.多态的访问特点

在这里插入图片描述

3.多态的优点和缺点

在这里插入图片描述

4.多态的转型

父类转为子类类型可能发生类型转换异常

在这里插入图片描述
5.图片笔记

多态2

多态3
在这里插入图片描述


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.4抽象类

1.抽象类的概念:注意:继承抽象类的子类必须重写抽象类里所有的抽象方法,非抽象方法子类是没有必须强制要重写的

在这里插入图片描述

2.抽象类特点:

在这里插入图片描述

在这里插入图片描述

抽象类中是可以定义成员属性的

3.abstract关键字不能和哪些关键字共存?
在这里插入图片描述

在这里插入图片描述
4.图片笔记:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.5接口

1.接口的定义特点:
在这里插入图片描述

2.接口成员特点:
在这里插入图片描述

接口中是可以定义非抽象方法的:用default关键字修饰

在这里插入图片描述

3.类和接口的关系:

在这里插入图片描述
4.抽象类和接口的区别:
在这里插入图片描述
5.图片笔记:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.内部类

3.1什么是内部类

总结:外部类想要访问内部类的成员和方法必须先创建内部类的对象,然后再通过内部类对象.方法名访问

在这里插入图片描述

3.2成员内部类

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.3静态内部类

MayiktA.MayiktB = new MayiktA.MayiktB()

在这里插入图片描述

在这里插入图片描述

3.4局部内部类

在这里插入图片描述

3.5匿名内部类

本质:在底层帮你实现或继承了一个类

在这里插入图片描述

3.6图片笔记

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.异常

4.1什么是异常

在这里插入图片描述

4.2try catch 用法

在这里插入图片描述

4.3catch顺序问题

在这里插入图片描述

4.4Exception异常

Throwable类是java语言中所有错误和异常的超类

在这里插入图片描述

4.5throw成员方法

在这里插入图片描述

4.6编译时与运行时异常区别

在这里插入图片描述

在这里插入图片描述

4.7异常处理之throws

总结:哪个方法调用到有抛出异常的方法,那么该方法也需要try catch后者throws抛出异常

在这里插入图片描述

4.8自定义异常

  • 自定义的异常类,实现编译时异常,直接继承Exception
  • 自定义的异常类,实现运行时异常,直接继承RuntimeException

在这里插入图片描述

4.9图片笔记

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.多线程

5.1什么是线程和进程

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

5.2为什么在进程中还需要线程

总结:线程之间互不影响,每个线程执行自己的任务,一条线中一个进程中只有一个线程是不可行的

在这里插入图片描述

5.3为什么需要使用多线程(并行与串行的区别)

总结:

  • 多线程相互之间不影响,提高效率,节省时间
  • 单线程遇到问题便不可执行其他任务,耗时

在这里插入图片描述

5.4使用多线程一定提高效率吗

总结:

  • 线程的状态有就绪状态、运行状态、死亡状态,线程被cpu调度后,状态由就绪状态变为运行状态,这个过程叫做上下文切换,也就是cpu从执行该线程切换到执行另外的线程
  • cpu调度时间(简称cpu调度时间片),一般只调度几十毫秒(所以底层执行并不是真正意义上的多线程,只是每个线程的调度时间很短,这里指的时单核的cpu)
  • 程序计数器可以保存当前线程执行到的位置,下次在被cpu调度时可以直接通过程序计数器往下执行
  • 利用多核多线程的性能,如果你的cpu是多核(4核、8核),这样的话每个线程都能分配到cpu就不会发生上下文切换,线程也不会争抢cpu。如果有上百个线程,那样线程就会争抢cpu,对于电脑的性能、代码的效率会有一定的影响。

5.5多线程应用场景

在这里插入图片描述

下图示例总结:其实就是多开几个线程分别去执行【发送短信线程】、【发送邮件线程】,这样客户端请求服务器端时,服务器端响应的时间会变短很多

在这里插入图片描述

5.6同步与异步之间的区别

总结:个人理解区别就在于代码1、2、3是串行执行还是并行执行,串行执行就是同步,并行执行就是异步

在这里插入图片描述

5.7创建线程的几种方式

在这里插入图片描述

5.8继承Thread类创建线程

在这里插入图片描述

5.9实现Runnable接口创建线程

在这里插入图片描述

5.91使用匿名内部类的方式创建线程

在这里插入图片描述

5.92使用lambda表达式创建线程

在这里插入图片描述

5.93synchronize锁同步

1.什么是线程安全问题

总结:多个线程通过执行Thread.sleep()方法,线程从执行状态变为休眠状态,再从休眠状态变为就绪状态–>执行状态,这个时候多个线程之间就会争抢cpu的执行权,导致一会是这个线程对这个全局变量做写的操作,一会是那个线程对全局变量做写的操作,这样就很容易出现问题,出现错误

在这里插入图片描述

写的操作—就是修改的意思

2.如何解决线程安全问题

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.synchronized锁基本的用法(加在代码块)

在这里插入图片描述

在这里插入图片描述

4.synchronized锁基本的用法(加在实例方法和静态方法)

在这里插入图片描述

5.synchronized死锁问题

在这里插入图片描述

5.如何诊断synchronized死锁

在这里插入图片描述

6.使用wait、notify方法注意事项

notify2

6.逻辑运算符(逻辑与、逻辑或、逻辑异或、非、短路与、短路或)

在这里插入图片描述

在这里插入图片描述

7.八大基本类型

1.八大基本类型速查表

在这里插入图片描述

2.Java给8大基本类型都提供了对应的“工具箱”

在这里插入图片描述

3.char类型

  • 字符型可以保存一个数字、字母、汉字,而且字符型永远只能存一个
  • char类型也可以存不被单引号包裹的数字,但是打印的并不是数字,而是会到Ascill码表中去查这个数字对应的字符打印出来,比如97对应’a’,128~65535这个范围的数字也可以保存,只不过eclipse一般显示为?(问号)
  • 字符用char存储,但是char本身是16位无符号整数,包含在int中,所以int也可以存
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

4.5条字面值规则

在这里插入图片描述

5.5条运算规则

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

6.类型转换

在这里插入图片描述

8.标识符

  • 由字母、数字、下划线、$(美元符号)组成
  • 不能以数字开头
  • 严格区分大小写
  • 见名知意,并且不要使用拼音或者中英文夹杂的方式
  • 不能使用关键字的名字命名

9.关键字

  • 被Java提前指定好的全小写单词,一共有50个;
  • 2个保留字:const和goto,目前还没有明确意义的关键字;
  • 还有3个不可以用作标识符的单词:true,false,null;(true和false不是关键字)

10.注释

用来解释代码,方便看看代码的人去理解代码的话

  1. 注释并不会影响程序的执行,会被编译器忽略掉
  2. 单行注释: // 可以注释一行的内容
  3. 多行注释:/ * * / 可以注释多行的内容
  4. 文档注释:/** */ 也可以注释多行内容,还可以添加一些额外的信息,比如:作者/时间/版本…

11.数组

1.数组概述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 数组的内存空间是连续的
  • int是基本类型,int[]代表的是int数组,是引用类型,而数组类型的变量比如a,保存的就是数组的地址值,而不是数组中的多个具体元素
  • 数组一旦创建,长度不可改变,如果想要增加/删除数组中的元素,只能先创建一个新长度的数组,再将原来的数据复制过去

在这里插入图片描述

在这里插入图片描述

2.数组的扩容与缩容

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.数组的截取

在这里插入图片描述

4.数组的排序

在这里插入图片描述

12.冒泡排序算法

在这里插入图片描述

13.Static关键字

1.static概述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.静态关键字访问特点

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.静态关键字应用场景

在这里插入图片描述

4.static修饰常量

public static final int CODE_200 = 200;

14.拓展小案例

1.编写一个计算器

package cn.tedu.review;

import java.util.Scanner;

/**本类用于实现简易计算器*/
public class TestCalc {
    public static void main(String[] args){
        f0();//调用一个实现计算器的方法
    }

    private static void f0() {
        while(true){
            System.out.println("请您输入要计算的第1个数:");
            int a = new Scanner(System.in).nextInt();
            System.out.println("请您输入要计算的第2个数:");
            int b = new Scanner(System.in).nextInt();

            System.out.println("请您输入要计算的运算符,支持:+ - * / :");
            String s = new Scanner(System.in).nextLine();

            switch(s){
                case "+":f1(a,b);break;
                case "-":f2(a,b);break;
                case "*":f3(a,b);break;
                case "/":f4(a,b);break;
                default: System.out.println("您输入的运算符不正确!");
            }

            //询问用户是否想继续运算
            System.out.println("如果想退出,请输入1,如果想继续,请输入2");
            int flag = new Scanner(System.in).nextInt();
            if(flag==1) break;
        }
    }

    private static void f1(int a, int b) {
        System.out.println(a+"和"+b+"做加法的结果为:"+(a+b));
    }

    private static void f2(int a, int b) {
        System.out.println(a+"和"+b+"做减法的结果为:"+(a-b));
    }

    private static void f3(int a, int b) {
        System.out.println(a+"和"+b+"做乘法的结果为:"+(a*b));
    }

    private static void f4(int a, int b) {
        System.out.println(a+"和"+b+"做除法的结果为:"+(a/b));
    }


}

15.构造代码块

在这里插入图片描述

16.局部代码块

在这里插入图片描述
在这里插入图片描述

17.静态代码块

静态代码块2

18.final关键字

final2

final3

final4

19.static关键字(静态)

static1

static2

static3

static4

static6

static7

在这里插入图片描述

17.Object类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

18.String类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

17.正则表达式

1.概述:

正确的字符串格式规则
常用来判断用户输入的内容是否符合格式的要求,注意是严格区分大小写的。

2.常见语法:

3.String提供了支持正则表达式的方法

Matches(正则) : 当前字符串能否匹配正则表达式
replaceAll(正则,子串) : 替换子串
split(正则) : 拆分字符串

4.测试输入身份证号

import java.util.Scanner;
/*本类用于正则表达式入门案例*/
//需求:接收用户输入的身份证号,并将判断的结果输出
public class TestRegex {
    public static void main(String[] args) {
        //1.编辑正则表达式
        //身份证号的规律:一共是18位,前17位是数子,第18位有可能是数字,也有可能是X
        //String regex = "[0-9]{17}[0-9X]";
        /*单个\在Java中有特殊的含义,表示转义符号,不认为是一个斜杠
         * 所以如果想要表示斜杠,需要在它的前面加一个用来转义的\
         * 也就是\\才表示成一个单纯的斜杠
         * \t -- 制表符  \r回车符 \n换行符*/
        String regex = "\\d{17}[0-9X]";

        //2.定义变量用来接收用户输入的身份证号:
        String input;

        //3.判断用户输入的数据是否符合正则表达式,如果不正确,继续输入
        do {
            System.out.println("请输入您的身份证号:");
            input = new Scanner(System.in).nextLine();
            if (input.matches(regex)) {//如果身份证号正确
                System.out.println("恭喜你!输入正确!");
                return;//结束本方法
            }
        } while (!input.matches(regex));//只要不符合正则表达式,就继续输入
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值