javaSE知识整理

Java程序开发的三个步骤:

编写代码,编译代码,运行代码

JDK、JRE、JVM的关系:

JDK:是Java语言的软件开发工具包,内部包含了JRE和代码的编译工具和运行工具。

JRE:指Java运行环境,包含JVM虚拟机和Java核心类库。

类:可以理解为是一个Java文件。

类库:存放多个Java文件的仓库。

IDEA常用快捷键:

Ctrl+D:向下复制一行

Ctrl+X :剪切当前行

Ctrl+alt+L:格式化代码

Alt+enter:代码修正提示

Ctrl+/:批量加入单行注释,再按一次就是取消

Ctrl+shift+/:批量加入多行注释,再按一次就是取消

Java基础语法的含义:

注释:对代码的一种解释

​ 单行注释:格式:// 注释信息

​ 多行注释:格式:/* 注释信息 */

​ 文档注释:格式:/** 注释信息 */

关键字:被Java赋予了特定涵义的英文单词(关键字的字母全部小写)。

常量:在程序的执行过程中,其值不会发生改变的量(数据)。

变量:变量的定义格式:

数据类型 变量名 = 数据值;

数据类型:基本数据类型和引用数据类型

​ 基本数据类型:数值型和非数值型

​ 数值型:整数(byte,short,int,long),浮点数(float,double),字符(char)

​ 非数值型:布尔(boolean)

​ 引用数据类型:类(class),接口(interface),数组([ ])

注意:==号作比较

基本数据类型:比较的是具体的值

引用数据类型:比较的是地址值

键盘录入语法:
Scanner sc = new Scanner(System.in);
类型转换:

隐式类型转换:把一个取值范围小的数值或者变量赋值给另一个取值范围大的变量。(底层直接转)

强制类型转换:把一个取值范围大的数值或者变量赋值给另一个取值范围小的变量。

​ 强转格式:目标数据类型 变量名 = (目标数据类型)值或者变量。

运算符的分类:

算术运算符:加减乘除余为二元运算,自增自减为一元运算。(自增自减:只能操作变量,不能操作常量)

三元运算符:格式:变量 = 关系表达式 ? 值1 :值2

​ 关系表达式的结果为:true或者false。

​ 如果表达式结果为true,就把值1赋值给变量。

​ 如果表达式结果为false,就把值2赋值给变量。

逻辑运算符:作用:把多个关系运算表达式连接在一起计算。

​ & 逻辑与 and的意思,遇false则false

​ | 逻辑或 或者的意思,遇true则true

​ ^ 逻辑异或 两边相同则为false,不同则为true

​ ! 逻辑非 取反

​ && 短路与 如果左边为true,右边执行;如果左边为false,右边不执行。(两边 都为true,结果为true。其他情况全为false)

​ || 短路或 如果左边为false,右边执行;如果左边为true,右边不执行。(两边都为false,结果为false。其他情况全为true)

赋值运算符:= <= >= !=

关系运算符:作用:针对两个数据之间的关系进行运算,运算结果为boolean类型(成立为true,不成立为false)。

switch语句格式:
switch(常量表达式){						//表达式:取值为:byte  short  int  char	
	case1:						  //	   JDK5以后可以是枚举,
		语句体1;				//		  JDK7以后可以是	String。
		break;
	case2:							//case:后面跟的值是需要与表达式进行比较的值
		语句体2;				  // 注意:case给出的值不能重复,并且只能是常量。
		break;				  
	case3:
		语句体3;				
		break;				 //break:表示中断,结束的意思,用来结束switch语句
		......
	default:
		语句体N+1;				//default:当所有情况都不匹配的时候执行该处的内容,
		[break;]			 //	         跟if语句的else相似。	 
}
关键字:

break关键字:

​ 含义:结束

​ 应用位置:switch语句中、循环中。

continue关键字:

​ 含义:跳过

​ 应用位置:循环中

三种循环的区别:

1.for循环和while循环先判断条件是否成立,然后决定是否执行循环体

2.do…while循环先执行一次循环体,然后判断条件是否成立,是否继续执行循环体。

for和while的区别:

1.for循环结束后,for循环中初始化语句变量无法在进行使用。

2.while循环结束后,while循环中初始化语句变量可以继续使用。

三种循环的使用场景:

1.有明确循环次数的时候使用for循环

2.不明确循环次数的时候使用while循环

3.do…while循环,很少使用。

什么是数组?

数组指的是一种容器,可以用来存储同种数据类型的多个值。

数组的定义格式:

数据类型【】 变量名 = new 数据类型【长度】

数组的初始化:

动态初始化:手动指定数组的长度,由系统为数组自动分配初始值。

​ 格式:数据类型【】 变量名 = new 数据类型【数组长度】;

​ 使用场景:只明确元素个数,不明确具体数值,使用动态初始化。

静态初始化:手动指定数组要存储的元素,系统会自动计算出该数组的长度。

​ 格式:数据类型【】 变量名 = new 数据类型【】{数据1,数据2,数据3,…};

​ 简化格式:数据类型【】 变量名 ={数据1,数据2,数据3,…};
​ 使用场景:需求中已经明确要操作的具体数据,直接可以静态初始化。

Java中内存的分配:

栈内存:方法运行时。进入的内存,局部变量都存放于这块内存当中。

堆内存:new出来的内容都会进入堆内存,并且会存在地址值。(每new一次都会产生一个新空间,并且地址值不重复)

方法区:字节码文件(.class文件)加载时进入的内存。

本地方法栈:调用操作系统相关资源。

寄存器:交给CPU使用的。

对象中数据的默认初始化值:

整数类型:0

浮点数:0.0

布尔: false

字符: 空字符

引用数据类型: null

多个数组在内存空间中的反应:

多个数组内存图:每new一次,在堆内存中,都是一块新的空间,堆内存中的空间地址不会出现重复的现象。

多个数组指向相同的内存空间:多个数组指向相同一个内存,任何一个数组对内存的改变,其他数组访问的都是修改之后的内容。

数组操作中常见的BUG:

索引越界:访问了数组中不存在的索引,造成索引越界的问题。

空指针异常:访问的数组已经不再指向堆内存,还在使用数组访问其元素,就会造成空指针异常。

数组中的常见操作:

遍历:将数组中所有的内容取出来,遍历指的是取出数据的过程。

方法概述:

方法:可以完成某个特定功能得代码块。

方法得优点:提高代码得复用性。

形参和实参

形参:形式参数,指的是方法定义中的参数。

实参:实际参数,指的是调用方法传递的参数。

public static void 方法名() //括号里面是传的参数,如果没有就是没有传参。
{     
    
    //方法体
    
}

// 当没有返回值的时候,使用关键字:void   表示没有返回值
// static:表示为这是一个静态方法。

//方法的调用格式:方法名();
public static void 方法名(数据类型 变量名){    
    //方法体
}

//注意:可以有多个参数,但是中间要用,隔开
//方法的调用格式:方法名(参数); 参数的个数和类型要和方法中定义的参数类型相匹配。
public static  返回值类型   方法名(){
    //方法体
    return 数据;  //必须确保返回的数据和定义方法时指定的返回值类型相匹配
}
//有返回值的方法的调用格式:
1.直接调用:  方法名();
2.赋值调用: 返回值类型  变量名 = 方法名();
3.输出调用: System.out.println( 方法名());
public static  返回值类型  方法名(数据类型 变量名,数据类型 变量名,......{
    //方法体
    return 数据;  
}
//数据是返回到调用方法的位置上的。
方法重载概述:

在同一个类中,方法名相同,但是方法里面参数的个数、类型、顺序不同,这些方法就构成了方法重载的关系。

方法重载的好处:可以不用去繁琐的起名字。

方法的参数传递:
基本数据类型参数传递:

特点:形参的改变不影响实参的值,因为基本数据类型传递的是一个具体的数据值。

引用数据类型参数传递:

特点:形参的改变直接影响实参的值,因为引用数据类型传递的是一个地址值。

二维数组
二维数组和一维数组的区别:

一维数组里面存储的元素是具体的数据

二维数组里面存储的元素是一维数组的地址值

二维数组的动态初始化:

数据类型【】【】 数组名 = new 数据类型【m】【n】

m表示:这个二维数组可以存放多少个一维数组

n表示:每一个一维数组可以存放多少个元素

二维数组的静态初始化:

数据类型【】【】 数组名 = { {元素值1,元素值2,元素值3…},{元素值1,元素值2…}… };

面向对象和面向过程的区别:

面向对象:是一种以对象为中心的编程思想,通过指挥对象来实现具体的功能。

面向过程:是一种以过程为中心的编程思想,实现功能的每一步,都是自己实现的。

类和对象的含义:

什么是类:类就是具有共同属性和行为特征的对象的集合与抽象。

什么是对象:是能够看到的摸得着的真实存在的实体,对象是根据类创建而来的。

类和对象的关系:类是对象的描述,对象是类的实体。
类的定义:
类的组成:属性、行为。

属性:在类中使用成员变量来体现。(类中方法外的变量叫做成员变量)

行为:在类中使用成员方法来表现行为。(跟之前的方法相比去掉static关键字即可)

对象的使用:
创建对象格式:类名 对象名 = new 类名();
使用对象成员的格式:

使用成员变量:对象名.变量名

使用成员方法:对象名.方法名

垃圾回收:

当堆内存中,对象或数组产生的地址,通过任何方式都不能被找到的时候,就会被判定为内存中的“垃圾”,垃圾会被Java垃圾回收器,空闲的时候自动进行清理。

成员变量和局部变量:
区别 成员变量 局部变量
类中位置不同 在类里面方法外面 在方法里面或者方法声明上(比如:形参)
内存中位置不同 堆内存 栈内存(因为方法在栈内存中)
生命周期不同 随着对象的存在而存在,随着对象的消失而消失 调用方法的时候,方法入栈就存在,方法的调用完毕出栈就消失
初始化值不同 有默认的初始化值 没有默认的初始化值,必须先定义,赋值,才能使用
面向对象三大特征:

封装、继承、多态

封装:
关键字:private
    1. 是一个权限修饰符
    2. 可以修饰成员变量和成员方法
    3. 被private修饰的成员只能在本类中才能访问
    4. 针对private修饰的成员变量,如果需要被其他类使用的话,需要提供“get”“set”方法
      1. “get变量名”方法:用于获取成员变量的值(取值),方法用public修饰
      2. “set变量名(参数)”方法:用于设置成员变量的值(赋值),方法用public修饰

简单来说关键字private的作用就是:把类中的属性进行私有化。

关键字:this

this:代表所在类的对象引用。作用就是:可以用来区分局部变量和成员变量同名的问题

构造方法
什么是构造方法?

在创建对象时,自动执行的方法称为构造方法。

在new对象时,JVM会自动调用所创建对象中的构造方法。另外构造方法不能手动调用

构造方法定义格式:

1.方法名与类名相同,大小写也要一致

2.没有返回值类型,连void都没有

3.没有具体的返回值(不能由return返回数据)

构造方法的作用:

给类中的私有成员变量初始化值(实例化对象)

构造方法的注意事项:

1.如果没有定义构造方法,系统将给出一个默认的无参构造方法。如果定义了构造方法,系统将不再提供。

2.构造方法的重载:如果自定义了带参构造方法,还要使用无参的,那么需要手动给出一个无参的构造方法

3.无论是否使用,都要手动书写无参和带参的构造方法

String字符串常见的面试题:
String字符串的特点:

String是一个类(不是java的基本数据类型)

String属于(java.lang)包下,使用的时候不需要导包

java程序中所有的双引号字符串,都是String类的对象

字符串在java中属于常量,常量不能修改

Java常量优化机制:

在使用javac.exe工具,对.java文件进行编译时:程序中使用“+”符合,连接的常量值,会进行合并运算

javaSE知识整理_第1张图片

创建字符串对象的区别:

以“”方式给出的字符串,只要顺序和大小写相同,无论在程序中出现多少次,JVM都只会创建一个String对象,并在字符串常量池中维护。

字符串常量池:当使用双引号创建字符串对象时,系统会检查该字符串是否在字符串常量池中存在,如果不存在就会创建,如果存在就不会重新创建,而是直接复用。(字符串常量池在堆内存中)。

字符串内容的比较方法:

.equals(String s)方法:可以比较字符串的内容,并且严格区分大小写,一般用在用户登录功能上面。

.equalslgnoreCase(String s)方法:不区分大小写。一般用在验证码上面。

他们两个的返回值都是boolean类型,相同返回true,不相等返回false。

取出字符串里面的字符的方法:

.charAt(int index):返回指定索引处的char值。索引范围为从0到length()-1。类似数组索引。

toCharArray()方法:将字符串转为新的字符(char)数组。

valueOf()方法:将字符(char)数组转换为字符串。

字符串截取方法:

.substring(int beginIndex):从指定的beginIndex索引位置处,开始截取字符串的子字符串(截取到末尾),并把截取到的字符串返回(返回的是一个新字符串)。

.substring(int beginIndex ,int endIndex):从指定的beginIndex索引位置处,截取到endIndex-1位置处,并把截取到的字符串返回。

字符串替换的方法:

.replace(CharSequence old , CharSequence new):把字符串中指定的old子字符串,替换为new新子字符串。

字符串切割的方法:

.split(String regex):根据传入的字符串作为规则进行切割,将字符串前的数据和字符串后的数据,一起存到一个String数组中,最后将数组返回。

字符串中常用方法小结:

equals():比较字符串的内容,区分大小写,返回的是boolean值

equalsIgnoreCase():比较字符串的内容,不区分大小写,返回的是boolean值

length():返回字符串的长度,返回的是int类型

charAt():取出指定索引处的char值

toCharArray():将字符串转换为字符数组返回

substring(int beginIndex,int endIndex):从beginIndex处开始截取一直到endIndex-1处。

substring(int beginIndex):从beginIndex处开始截取一直到末尾。返回的是一个新的字符串

replace(CharSequence target,CharSequence replacement):将字符串的旧值替换为一个新值

split(String regex):按一个指定的符号,对字符串进行切割,返回一个字符数组。

StringBuilder:
StringBuilder和String的区别:

StringBuilder是一个可以改变的字符串类,可以把它当作是一个容器,String类是一个不可改变的字符串类。

StringBuilder构造方法:

public StringBuilder():创建一个空的容器,不含有任何内容。

public StringBuilder(String str):根据字符串的内容,来创建带有初始化值的容器

StringBuilder常用方法:

append(任意类型):添加数据,并返回对象本身。 append(追加的意思)

注意:任何数据在存储到StringBuilder中时,全部都是按照字符来存储的。

reverse():将容器中的数据进行反转,并返回对象本身。 reverse(反转的意思)

length():返回长度。

toString():通过toString()可以把StringBuilder转换为String。

集合:
集合和数组的区别:

相同点:都是存储数据的容器

不同点:数组的容量是固定的,集合的容量是可变的

集合的弊端:集合中只能存储引用类型(8种基础类型不能存储)

ArrayList集合:

构造方法:public ArrayList()

创建集合:ArrayList<数据类型> list = new ArrayList<数据类型>();

集合的常用方法:

add(E e):将指定的元素添加到此集合的末尾。(E:表示泛型:任意类型)返回值boolean

add(int index,E element):向集合中的指定位置插入指定的元素

remove(Object o):删除指定的元素,返回删除是否成功

remove(int index):删除指定索引处的元素,返回被删除的元素

set(int index,E element):修改指定索引处的元素,返回被修改的元素

get(int index):获取指定索引处的元素

contains(Object o):判断集合中是否包含指定的元素,返回boolean值

size():返回集合中元素的个数

量是固定的,集合的容量是可变的

集合的弊端:集合中只能存储引用类型(8种基础类型不能存储)

ArrayList集合:

构造方法:public ArrayList()

创建集合:ArrayList<数据类型> list = new ArrayList<数据类型>();

集合的常用方法:

add(E e):将指定的元素添加到此集合的末尾。(E:表示泛型:任意类型)返回值boolean

add(int index,E element):向集合中的指定位置插入指定的元素

remove(Object o):删除指定的元素,返回删除是否成功

remove(int index):删除指定索引处的元素,返回被删除的元素

set(int index,E element):修改指定索引处的元素,返回被修改的元素

get(int index):获取指定索引处的元素

contains(Object o):判断集合中是否包含指定的元素,返回boolean值

size():返回集合中元素的个数

你可能感兴趣的:(java)