Java SE基础易忘知识总结

1、JVM是Java虚拟机,将Java源文件编译为字节码文件。
JRE是运行时环境,包括JVM和Java核心类库
JDK是Java开发工具包,包括JRE和开发工具

2、关键字是Java中具有特殊函数的字段,而标识符则用来命名变量、方法、类

3、Java数据类型分为基本数据类型和引用数据类型
基本数据类型:数值型(整数、浮点数、字符)非数值型(布尔)
引用数据类型:类、接口、数组

4、自动类型转换:小转大,没有数据的丢失
在这里插入图片描述强制类型转换:大转小,有数据的丢失

字符类型在计算时用计算机底层对应的十进制计算:‘A’65 ‘a’97 ‘0’48

byte、short、char类型一般默认被当做int类型,int类型常量也可以自动转换为这三种类型(常量默认是int型)

例子:
byte b = 127;
正确,右边是默认int型,但是可以转换为byter型被左边接收
int a = 127;
byte b = a;
错误,a是int型变量,左边需要为int型或者右边进行一个强制类型转换

char b = ‘a’ + 18;
正确,'a’相当于一个常量,右边是默认int型,但是可以转换为char型被左边接收
char a = ‘a’;
char b = a + 18;
错误,a是char类型,会被当做int型变量进行计算,左边需要为int型或者右边进行一个强制类型转换

5、关系运算符是true和false
逻辑运算符是& | ! ^

6、Random产生随机数
Random r = new Random();
int number = r.nextInt(10);
左闭右开

7、栈内存是方法运行的,存储局部变量,方法使用完就消失
堆内存是new创建的内容(实体、对象、数组等),Java进行回收

8、方法重载:同一个类;相同方法名;参数类型或数量不同(与返回值无关)

9、在这里插入图片描述

10、面向对象和面向过程:面向过程是注重步骤,面向对象则更注重功能

比如:编写一个五子棋程序,面向过程是【棋盘-白子走-绘制图形-判断是否结束-黑子走-…】,而面向对象是【规则系统,黑子和白子行为系统,绘制系统…】

面向过程就像是蛋炒饭,面向对象就像是盖浇饭一样

11、成员变量:在堆内存中;有默认初始值;随对象存在而存在,随对象消失而消失
局部变量:在栈内存中;无默认初始值;随方法存在而存在,随方法消失而消失

12、this关键字解决了局部变量和成员变量的同名问题
方法中加this修饰的是成员变量,this代表的是当前调用方法的引用

13、API是应用程序编程接口,Java API就是JDK提供的各种功能的类,封装起来

14、String类效果上相当于字符数组,底层原理是字节数组
通过new创建的字符串对象,每次new都会申请内存,虽然内容相同·,但是地址不同;直接赋值的话,字符序列相同,JVM只会创建一个String对象

15、StringBuilder中append方法和reverse方法返回的都是对象本身,和String类相互转换:
String s = sb.toString();
StringBuider sb = new StringBuider(s);

16、遍历集合:
for(int i=0;i<array.size();i++){
String s = array.get(i);
sout(s);
}

17、this是子类对象的引用,super是父类对象的引用

18、继承中构造方法的访问特点:
子类中所有构造方法都会访问父类无参构造方法
如果父类没有,则可以通过super显示调用父类带参构造方法;也可以父类创建一个无参构造方法

19、权限修饰符
在这里插入图片描述

20、状态修饰符final
修饰成员方法:不能被重写
修饰成员变量:不能被再次赋值,常量
修饰类:不能被继承

21、状态修饰符static
可修饰成员变量和成员方法(无this),属于类

22、在这里插入图片描述
23、封装
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问 成员变量private,提供对应的getXxx()/setXxx()方法

封装好处 通过方法来控制成员变量的操作,提高了代码的安全性 把代码用方法进行封装,提高了代码的复用性

24、多态成员访问特点:成员变量:编译和运行都看父类。成员方法:编译看父类,运行看子类

25、多态好处和弊端:
好处:提高程序的扩展性。定义方法时候,使用父类型作为参数,在使用的时候,使用具体的子类型参与操作
弊端:不能使用子类的特有成员

26、多态的转型:
1.向上转型:父类引用指向子类对象。
比如:Animal a = new Cat();

2.向下转型:子类型 对象名 = (子类型)父类引用;
这样就可以访问子类的特有成员了

27、抽象类和接口的区别:
1.成员区别

抽象类:变量,常量;有构造方法;有抽象方法,也有非抽象方法
接口:常量;抽象方法

2.关系区别

类与类:继承,单继承
类与接口:实现,可以单实现,也可以多实现
接口与接口:继承,单继承,多继承

3.设计理念区别

抽象类:对类抽象,包括属性、行为
接口:对行为抽象,主要是行为

第三点是主要区别:
抽象类是用来捕捉子类的通用特性的,而接口则是抽象方法的集合;抽象类不能被实例化,只能被用作子类的超类,是被用来创建继承层级里子类的模板,而接口只是一种形式,接口自身不能做任何事情。
比如说门,门都有开和关这两种行为,属性比如说材质,尺寸等等,这是一类东西,所以是一个抽象类。但是现在要求有一个报警门,就需要安装一个报警器,主要功能是报警,这就是一种行为,需要用接口来实现,这个不是门这个类所必需的!

28、内部类的访问特点
内部类可以直接访问外部类的成员,包括私有。
外部类要访问内部类的成员,必须创建对象。

29、匿名内部类
前提:存在一个类或接口。匿名类是局部内部类的一种。
格式:new 类名/接口名{重写方法}
匿名内部类的本质是一个继承了该类的子类匿名对象!用来简化代码。

interface Jumpping {
    void jump();
}
class Dog implements Jumpping {
    @Override
    public void jump() {
        System.out.println("狗可以跳高了");
    }
}
class JumppingOperator {
    public void method(Jumpping j) { //new Dog();
        j.jump();
    }
}

class JumppingDemo {
    public static void main(String[] args) {
        //需求:创建接口操作类的对象,调用method方法
        JumppingOperator jo = new JumppingOperator();
        Jumpping j2 = new Dog();
        jo.method(j2);
        // 匿名内部类的简化
        jo.method(new Jumpping() {
            @Override
            public void jump() {
                System.out.println("狗可以跳高了");
            }
        });
    }
}

30、int类和String类相互转换的方法

1.int转String

直接在数字后加一个空字符串
通过 String类静态方法valueOf()

2.String转int

先将字符串数字转成 Integer,再调用intValue()方法
Integer i = Integer.valueOf(s);
int x = i.intValue();
通过 Integer静态方法parseInt()进行转换
int y = Integer.parseInt(s);

31、时间类
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy年MM月dd日 HH:mm:ss”);
String s = sdf.format(d);

32、
在这里插入图片描述
编译时异常和运行时异常的区别

1.编译时异常

都是 Exception类及其子类
必须显示处理,否则程序就会发生错误,无法通过编译(如IO异常和sql异常)

2.运行时异常

都是 RuntimeException类及其子类
无需显示处理,也可以和编译时异常一样处理,一定要修改代码才能解决(如数组下标越界、空指针异常等错误)

编译时异常必须要进行处理,两种处理方案: try…catch …或者 throws,如果采用 throws 这种方案,将来谁调用谁处理
运行时异常可以不处理,出现问题后,需要我们回来修改代码

33、多线程

34、lambda表达式:用来简化匿名内部类的书写
格式:(形式参数) -> {代码块}
例子:

public class MyRunnable implements Runnable {
  @Override
  public void run() {
    System.out.println("多线程程序启动了");
 }
}
public class LambdaDemo {
  public static void main(String[] args) {
    //方式一
    MyRunnable my = new MyRunnable();
  	Thread t = new Thread(my);
   	t.start();
    //方式二
	new Thread(new Runnable() {
		@Override
		public void run() {
			System.out.println("多线程程序启动了");
		}
	}).start();
    //方式三
    new Thread( () -> {
      System.out.println("多线程程序启动了");
   } ).start();
 }
}

35、注意事项:
使用 Lambda必须要有接口,并且要求接口中有且仅有一个抽象方法
省略:
参数类型可以省略。但是有多个参数的情况下,不能只省略一个
如果参数有且仅有一个,那么小括号可以省略
如果代码块的语句只有一条,可以省略大括号和分号,和 return关键字

36.集合:
集合(一)
集合(二)
集合(三)

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值