JAVA基础
- 计算机中存储数据的单位是字节,由8个二进制位组成
- 常用DOS命令:
- JAVA 三大平台:
JAVA SE :JAVA语言的标准版,用于桌面应用开发
JAVA ME :JAVA语言的小型版,用于嵌入式开发
JAVA EE :JAVA语言的企业版,用于Web方向的网站开发 - JAVA 跨平台性:Windows MacOS Linux,需要按照与操作系统对应版本的JVM虚拟机
- JDK版本:LTS长期支持版,当前为JDK21
- JAVA开发的三个步骤:编写代码,编译代码,运行代码
使用javac来编译java文件,生成.class编译文件,再使用java运行 - JDK的组成:
JRE:JAVA的运行环境,包含JVM(JAVA虚拟机)和核心类库
开发工具:java,javac…… - IDEA项目结构:Project(项目,工程),module(模块),package(包),class(类)
- 字面量:
- 基本数据类型:
定义long类型时,需要在数值后面加L(大小写都行)
定义float类型时,需要在数值后面加F(大小写都行) - 引用数据类型:数组,类,接口,其中字符串类型(String)属于一种类
- 键盘录入:
import java.util.Scanner;
Scanner sc = new Scanner(System.in);
int age = sc.nextInt();
- 原码,反码,补码:计算机中数据的运算,转换都是使用补码完成的,这会导致强制转换中出现精度损失
- JAVA常量优化机制:
byte c = 3 + 4;
在编译的时候就会将3和4两个字面量进行运算,生成字节码文件: byte c = 7;但运算后超出范围也会报错 - 扩展的赋值运算符自带强制转换效果:+=,-=,*=等
- 短路逻辑运算符:
&&:左边为false,右边不执行
&:两边都要执行
||:左边为true,右边不执行
|:两边都要执行 - 三元运算符:判断条件?值1(true):值2(false)
- 运算符优先级:
- 实现两个变量的数据交换,不允许定义第三方变量:
使用异或操作^
a=a^b;
b=a^b;
a=a^b;
- 方法调用内存图解:
方法没有被调用的时候,在方法区中的字节码文件中存放
方法被调用的时候,需要进入到栈内存中运行
- 形参与实参:
形参:全称形式参数,是指在定义方法时,所声明的参数
实参:全称实际参数,调用方法时,所传入的参数 - 方法重载:
在同一个类中,定义了多个同名的方法,但每个方法具有不同的参数类型或参数个数,这些同名方法,就构成了重载关系
识别方法之间是否是重载关系,只看方法名和参数,跟返回值无关 - JDK14版本开始,switch case后允许写多个数据,使用逗号分割
- JAVC内存分配:new会分配堆内存
- 方法的参数传递:基本数据类型传递的是数据值,引用数据类型传递的是地址值
- 对象内存图:多个对象共用成员方法在字节码文件中的地址
- 成员变量和局部变量的关系:
- this关键字:代表当前类对象的引用(地址)
(1)当局部变量和成员变量重名的时候,Java使用就近原则
(2)this关键字的作用:调用本类成员
this.本类成员变量,如果不涉及变量重复,this.可以省略
this.本类成员方法(),没有前提条件this.可以直接省略 - 构造方法:创建对象时,进行初始化
构造器:
(1)初始化一个新建的对象
(2)构建、创造对象的时候,所调用的方法
格式:
(1)方法名与类名相同,大小写也要一致
(2)没有返回值类型,连void都没有
(3)没有具体的返回值(不能由return带回结果数据)
注意事项:
(1)构造方法的创建
a.如果没有定义构造方法,系统将给出一个默认的无参数构造方法
b.如果定义了构造方法,系统将不再提供默认的构造方法
(2)构造方法的重载:构造方法也是方法,允许重载关系出现
(3)推荐的使用方式:无参数构造方法,和带参数构造方法,都自己手动给出 - 权限修饰符:
private:同一个类中
(default):同一个类中,同一个包中
protected:同一个类中,同一个包中,不同包的子类
public:任意位置访问 - String:
Java 程序中所有双引号字符串,都是String 类的对象;字符串在创建之后,其内容不可更改,但是可以被共享
案例分析:true(左上,字符串常量池),false(右上),false(左下,内部调用toString创建在堆上),true(常量优化机制)
String类的切割方法:public String[] split(string regex),根据传入的字符串作为规则(支持正则表达式匹配),切割当前字符串,返回一个字符串数组
建议:先正常指定切割规则,后来发现没有得到自己要的效果,就可以尝试在规则前面,加入\
String类的比较方法:public boolean equals(要比较的字符串)
String类的忽略大小写比较方法:public boolean equalsIgnoreCase(要比较的字符串)
String类的字符串转换为字符数组方法:public char[] toCharArray()
String类的根据索引找字符方法:public char chatAt(int index)
String类的计算字符串长度方法:public int length()
String类的截取到末尾方法:public String substring(int beginIndex)
String类的根据开始和结束索引截取方法(包含头不包含尾):public String substring(int beginIndex, int endIndex)
String类的替换方法:public String replace(l日值,新值)
String类的按照正则表达式匹配的内容进行替换方法:public String replaceAll(String regex,String newStr) - StringBuiler:
StringBuilder是字符串的缓冲区,可以将其理解为是一种容器,是一种可变的字符序列
public StringBuilder append (任意类型):添加数据,并返回对象本身
public StringBuilder reverse():反转容器中的内容
public int length():返回长度(字符出现的个数)
public String toString():通过toString()就可以实现把StringBuilder转换为String
链式编程:调用的方法,返回的结果是对象,就可以继续向下调用方法 - ArrayList:
细节:创建String,StringBuilder,ArrayList类的对象,打印对象名,都没有看到地址值,而是元素内容
(1)构造方法:public ArrayList(),创建一个空的集合容器
(2)集合容器的创建细节:ArrayList<> list = new ArrayList<>(),可以添加任意类型数据,但数据不够严谨
(3)泛型<>:使用泛型,可以对集合中存储的数据,进行类型限制,但泛型中,不允许编写基本数据类型,如果想使用基本数据类型,需要用所对应的包装类
byte ------ Byte
short ------ Short
int ------ Integer
long ------ Long
float ------ Float
double ------ Double
boolean ------ Boolean
char ------ Character
JAVA进阶
static静态修饰符
static关键字:修饰符,可修饰成员变量 - 共享数据,成员方法 - 用于工具类(不是描述事物,而是完成功能)
特点:
- 被类的所有对象共享
- 可以通过类名进行调用
- 随着类的加载而加载,优先于对象存在
私有工具类的构造方法,不让其他类再创建对象,PS:System类
在静态方法中只能访问静态成员(直接访问)
extends继承
JAVA只支持单继承,不支持多继承,但可以多层继承
类与类之间存在共性内容,子类可以使用父类中非私有的成员,子类采用就近原则,this调用本类成员变量,super调用父类成员变量,方法
方法重写:子父类中出现方法声明一模一样的方法(方法名,参数,返回值)。子类重写父类方法时,访问权限必须大于等于父类,但父类中的私有方法不能被重写,,且构造方法无法继承,需要重新写
方法重载是同一个类中同名不同参数的方法,与方法重写重点区分
除了Object类,在所有构造方法的第一行代码,都默认隐藏了一句 super(),通过这句代码可以访问父类的空参数构造方法
细节:Java当中所有的类,都直接或者间接的维承到了 Object 类