JavaSE:基础知识

JavaSE

学习狂神说java系列课程的笔记

1.运行过程

编译型:操作系统

解释型: 网页

Java文件先编译成字节码的javac文件,(通过JVM),通过解释器给操作系统平台。

2.数据类型

  • 基本类型\引用类型

八个基本类型:byte(1) short(2) int(4) long(8) boolean(1 bit) float(4) double(8) char(2)

进制:二进制0b 八进制0 十六进制0x

所有字符的字符本质还是数字,Unicode编码表长两字节,0~65536 eg. '\u0061'

  • 类型转换

强制转换(从高到低),存在内存溢出

自动转换

  • JDK7特性:数字之间可以用下划线分割

3.变量作用域

  • 类变量:static(修饰符不存在先后顺序)
  • 实例变量:类里面,方法外面,从属于对象
  • 局部变量:必须声明和初始化值,方法内

4.用户交互Scanner

Scanner scanner = new Scanner(System.in);
if(scanner.hasNextLine()) {
  String str = scanner.nextLine();
  System.out.println(str);
}
scanner.close();

5.IDEA 反编译

6.Java只有值传递

7.可变参数...

本质是数组,只能有一个放在形式参数最后

8.数组

//declare
dataType[] a;
//not recommendation
dataType a[];
dataType[] a = new dataType[10];
//过程:先在栈中分配一个a的空间,再在堆中分配空间,a指向堆。Java对象都是在堆中,数组是在堆中的。

数组对象本身没有什么方法供使用,但API提供了一个工具类java.util.Arrays供使用,如Arrays.toString。Arrays中的方法都是static修饰的静态方法,可以使用类名进行调用。

9.oop

  • 类与对象的关系:类是一种抽象的数据类型,对象是具体实例

  • 构造器:如果定义了有参构造之后想要使用一个无参构造,需要显示的定义。

  • 内存分析:

10.继承

  • extends关键字

  • 默认继承Object类

  • super关键字

  • 父类构造器super();

  • 方法重写:注解@override

  1. 子类重写父类的非静态方法
  2. 范围可以扩大不能缩小(public>protected>default>private)
  3. 抛出的异常:范围,可以被缩小但不能扩大:ClassFoundException -- Exception(大)
  4. 为什么:父类的功能子类不一定需要
  5. private方法不能重写,static方法不能,属于类,final不能,常量
    (static不能原因:重写方法的目的是为了多态,或者说:重写是实现多态的前提,即重写是发生在继承中且是针对非static方法的。
    语法上子类允许出现和父类只有方法体不一样其他都一模一样的static方法,但是在父类引用指向子类对象时,通过父类引用调用的依然是父类的static方法,而不是子类的static方法。)

11.多态

  • 即同一方法根据发送对象的不同而采用不同的方式。
  • 动态编译
  • 一个对象的实际对象是确定的。可以指向的引用类型不确定,父类的引用可以指向子类
  • 多态是方法的多态
  • 父类和子类之间才能使用,ClassCastException
  • 子类重写了父类的方法,会执行子类的方法
  • instanceof,只要有父子关系就true

12.static修饰词

静态变量:与类有关,类名和对象名都可访问

静态方法:与类一起加载,可以在非静态函数直接调用

静态代码块:

static {
  //只加载一次
}
{
  //匿名代码块,每次new都执行一次,都在构造器之前
}

静态导入包:

import static java.lang.Math.random
import java.lang.Math
//false import ...random

13.抽象类

//抽象类,不能new,只能子类实现,约束;有构造器
public abstract class Action{
  //抽象方法,子类必须实现
  public abstract void do{}
}

14.接口

可以实现多继承,使用比抽象类广泛,没有构造方法

public interface UserService{
  //接口中的所有定义的方法都是抽象的 默认前缀 public abstract
  //属性默认常量 默认前缀,很少使用 public static final
  //int age = 99;
  void add();
}

//实现接口的类,可以多继承
public class serviceImp1 implements UserService, Timeservice{
  public void add(){
    
  }
}

15.内部类

  • 成员内部类:A类中的B类

实例化B类需要A类的对象,内部类可以获得外部类的私有属性。

  • 静态内部类:static,不能获得外部类的私有属性和非静态
  • 一个java类中可以有多个class,但只能有一个public class类
  • 局部内部类:方法里的类
  • 匿名内部类:没有名字初始化类,不用将实例保存到变量中: new Apple().eat()

16.异常

java把异常当作对象处理,定义了一个基类java.lang.Throwable作为所有异常的超类。异常分为两大类:错误Error和异常Exception。

Error类对象由JVM生成并抛出,如,当JVM不再有继续执行操作所需的内存资源时,出现OutofMemoryError。错误是不可查的,它们在应用程序的控制和处理能力之外,并且绝大多数是程序运行时不允许出现的状况。

Exception:运行时异常RuntimeException,eg,ArrayIndexOutOfBoundException。这些异常一般由程序逻辑错误引起,应尽量避免。Exception通常情况下可以被程序处理,应尽可能在程序中处理。

  • 异常处理:抛出异常throw、捕获异常try\catch\finally(optional,必执行)

  • catch(Throwable\Exception\Error),从小往大写

  • 方法中抛出异常throws

自定义异常:继承Exception类即可

posted on 2021-02-16 10:28  曦的问候  阅读(47)  评论(0)    收藏  举报