【Java SE】1.JAVA基础知识

1.Java语言发展史

Java语言是Sun公司在1995年推出的计算机语言。
Java之父:詹姆斯·高斯林(James Gosling)
1996年Java推出Java 1.0
1997 Java 1.1
1998 Java 1.2
2000 Java 1.3
2002 Java 1.4
2004 Java 5.0(更新力度大)
2006 Java 6.0
2009 Oracle甲骨文公司收购Sun
2011 Java 7.0
2014 Java 8.0(公司使用最多版本)
2017 9月 Java 9.0
2018 3月 Java 10.0
2018 9月 Java 11.0

2. Java 跨平台原理

中国人与日本人进行交流,需要找个翻译。
Java在Windows上运行,需要JVM。
在运行Java 应用程序的操作系统上,安装一个与操作系统对应的Java虚拟机(JVM)即可

JDK (Java Development Kit) ,Java程序开发包,包含JRE和开发使用的工具(编译工具javac.exe,运行工具java)想要开发Java程序必须安装JDK javac
JRE (Java Runtime Environment),Java运行时环境,包含JVM和运行需要的类库,需要运行一个java程序,只需要安装jre即可 java

java的跨平台主要是JVM跨平台,.class可以在虚拟机中运行

3.JDK下载和安装

下载安装JDK 1.8。注意目录不能有中文

  • 目录介绍:
    bin 存放JDK的各种工具命令,java javac
    conf JDK相关配置文件
    include 存放平台特定的头文件
    jmods 存放JDK的各种模块
    legal 存放JDK各模块的授权文档
    lib 存放JDK工具的补充jar包

4. 常用的DOS命令

win+r 输出cmd

5. Path 环境变量

配置JAVA_HOME=c:\xxx
%JAVA_HOME%\bin

6.数据类型

  • 八大基本数据类型以及对应的包装类
    • byte Byte
    • char Character
    • short Short
    • int Interger
    • long Long
    • float Float
    • double Double
    • boolean Boolean

7.运算符号

%取余数 /取整
|或 &和 逻辑与
&&短路与
equals 比较内容
== 比较内存 ?
正则表达式
Math.ceil();向上取整double
Math.floor();向下取整double
Math.round();四舍五入long不带小数点了

8.成员、局部变量和方法

  • 定义位置不一样
  • 作用范围:成员变量在当前类的所有方法中都可以访问(注意:static)
  • 默认值不一样:成员变量都有默认值,而局部变量必须赋值后才可以使用
  • 内存位置不一样:局部栈内存,成员堆内存
  • 生命周期不一样:局部方法进栈诞生,方法出栈消失,成员对象创建诞生,对象被垃圾回收消失。
  • static只能修饰成员方法和成员变量
  • 静态方法中可以直接调用另一个静态方法
  • 实例方法也可以直接调用静态方法
  • 静态方法调用非静态方法需要先实例化非静态方法所在的类
  • 实例方法可以直接调用另一个实例方法
  • 如何调用另一个类的静态成员变量和静态成员方法(局部的不能调用)-直接使用类名点的方式

Java命令
循环
形参实参(一个内存、两个变量)参数形参是局部变量,在调用方法时赋值,不能在括号内赋值,形参不赋值也能调用。
方法的返回值
方法的递归调用
包与权限


9.方法重载overload|重写override

方法名称相同,方法的参数个数、类型、顺序至少一个不相同。与修饰符号public无关,与返回类型无关。让方法的功能更多,更具兼容性。例如:println();

子类的成员方法与父类的成员方法名称相同,参数个数,类型、顺序完全一样,访问的修饰符号子类可以更大,声明的异常子类、返回值类型可以更小。

10.构造方法

构造方法是用来创建对象的,通过new 来创建对象时,其实就是在调用构造方法。类名相同,没有返回值,通过实例化这个类的时候调用。默认构造与类名相同、无参数、无代码、公开的。空类中有默认构造方法,只要定义了构造,默认构造就不默认提供。
私有化构造,只能自己实例化自己,单例需要提供静态的工厂方法instance()返回自己的实例。

继承中的构造是:

  • 先执行父类构造,再执行子类构造默认有super();
  • 可以用super(参数);调用父类重载构造
  • super();的父类调用只能是第一个语句

11.String

String的内部为char[]数组
字符串内容永不可变
String 字符串常量(线程安全)相加内存中会有多个字符串,效率低下。StringBuilder(str);
StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)默认为“”,转成字符串:toString();
将String转化为StringBuffer,字符串缓冲区,默认长度为16的数组。
String str = "abc";
StringBuffer sb = SringBuffer(str);
sb.append("123");

String类的API
字符串常量池,直接双引号创建的字符串就这字符串常量池中。true
new的字符拼接的字符串不在池中。
对于引用类型来说,==比较地址值
str1.concat(str2);//1,2都不改变。产生新的字符串str3
str1.substring(int begin,end);//字符串的截取
str="hello";str="world";//str中存的是地址值,字符串还是没变
char[] chars= sttr.toCharArray();
split(正则表达式);分割注意"."分割不可以,要用"//."

包装类

将基本数据类型包装为类,提供需要的方法、
ArrayList无法存储基本类型但是可以存储包装类

# 装箱与拆箱
ArrayList list = new ArrayList<>();
list.add(1);   //自动装箱
int a = list.get(0); //自动拆箱

12.继承

继承是指一个类是另一个类的子类,extends。在Java中是单一继承的。
从父类中继承的是被public\protected修饰的实例成员变量或成员方法
如果子类重写了父类的方法,则调用时就会调用子类的,否则调用父类的
instanceof有继承关系的两个类的判断 A 是不是继承B

13.多态(动态绑定)

父类的变量=子类的实例
成员变量与类型绑定
实例方法与对象绑定

14.super&& this

super 表示某个类的父类,只能用在非静态方法中。
功能:

  • 在子类中通过super(…)调用父类的构造方法,第一句
  • 在子类中访问被隐藏的父类的成员变量和方法

this 表示当前对象的引用,只能用在非静态的方法中
功能:

  • 在构造方法中的第一句,调用另一个构造方法。
  • 在非静态方法中调用被隐藏的成员变量和方法,非第一句。解决成员变量和局部重名问题
    【Java SE】1.JAVA基础知识_第1张图片
    super和this内存.jpg

构造方法

不能用static,构造方法不能被重写,final不能被重写。

final修饰 -
这个类不能有子类
成员变量 在声明时必须赋值,或在构造中赋值,不能修改值
成员方法 子类不能重写这个方法

finally finallize
finallize当垃圾回收器确定不存在该对象的更多引用时,由对象的垃圾回收器调用方法。
finally有程序代码块调用,一定执行。try catch finally

Scanner&Random

Scanner sc = new Scanner(System.in); //System.in从键盘输出
int num = sc.nextInt();
//String str = sc.next();
//使用匿名对象
method(new Scanner(System.in));

Random r = new Random(); 
r.next(3);//[0,3)
【Java SE】1.JAVA基础知识_第2张图片
键盘输入三个值最大的jpg.jpg

11抽象类

abstract抽象
可以修饰类,表示这个类是抽象类,抽象类不能被new实例化,就是不能创建对象
抽象类的功能是让子类继承
抽象类可以包含抽象方法
抽象方法的特点
不能有方法体
必须在抽象类中
子类必须实现父类全部的抽象方法
abstract的限制
不能与static共用
不能与private共用
不能与final共用

12接口

适配器是对接口的方法做了默认实现

  • interface定义的类就是接口
  • 接口通过implements实现
  • 一个类只能继承一个其他类,但可以实现多个接口
  • 接口中所有的方法都是public abstract
  • 接口中所有成员变量都是public static final静态常量

接口的内容:

  • 1成员变量其实是常量:
    [public] [static] [final] 数据类型 常量名 = 数据值;
    常量必须赋值,赋值后不能改变,常量名称完全大写,用下划线分割。
  • 2接口中最重要的就是抽象方法:
    [public] [abstract] 返回值类型 方法名称(参数);
    注意:实现类必须覆盖接口的所有抽象方法,除非实现类为抽象类
  • 3从Java 8开始,开始接口中定义默认方法:
    [public] default 返回值类型 方法名称(参数){方法体}
    主义:默认方法也可以被覆盖重写
  • 4从Java 8开始,接口中定义静态方法:
    [public] static 返回值类型 方法名称(参数){方法体}
    注意:通过接口名调用,不能通过实现类对象调用
  • 从Java 9开始,接口中可以定义私有方法:
    private [static] 返回值类型 方法名称(参数){方法体}
    注意:只有自己能调用

13内部类

访问外部类的所有成员信息
实现数据封装
数据回调
静态内部类,不和外部类一起加载和初始化,他是单独的初始化。

匿名内部类,在【[创建对象]的时候,只能使用一次。省略了实现类/子类的名称
如果希望多次创建对象,而且类的内容一样,那么需要使用单独定义的实现类。
匿名对象,在【[调用方法]】的时候只能调用唯一的一次。省略了对象的名称
如果希望同一个对象,调用多次,那么必须给对象起个名字。

static

使用static的变量或方法,则该变量或方法不在属于对象,而是属于这个类。类名.方法名调用。静态不能访问非静态。静态方法中不能用this,this指代当前对象,static跟对象没关系。只和类有关系

修饰成员变量,成员方法,内部类,代码块。
不能修饰顶层类,构造方法,局部变量,不能与abstract共同使用
静态代码块在类的字节码被载入内存时执行,forName只加载字节码不实例化类,单例模式,懒汉、饿汉static

你可能感兴趣的:(【Java SE】1.JAVA基础知识)