编写代码,编译代码,运行代码
JDK:是Java语言的软件开发工具包,内部包含了JRE和代码的编译工具和运行工具。
JRE:指Java运行环境,包含JVM虚拟机和Java核心类库。
类:可以理解为是一个Java文件。
类库:存放多个Java文件的仓库。
Ctrl+D:向下复制一行
Ctrl+X :剪切当前行
Ctrl+alt+L:格式化代码
Alt+enter:代码修正提示
Ctrl+/:批量加入单行注释,再按一次就是取消
Ctrl+shift+/:批量加入多行注释,再按一次就是取消
注释:对代码的一种解释
单行注释:格式:// 注释信息
多行注释:格式:/* 注释信息 */
文档注释:格式:/** 注释信息 */
关键字:被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(常量表达式){ //表达式:取值为:byte short int char
case 值1: // JDK5以后可以是枚举,
语句体1; // JDK7以后可以是 String。
break;
case 值2: //case:后面跟的值是需要与表达式进行比较的值
语句体2; // 注意:case给出的值不能重复,并且只能是常量。
break;
case 值3:
语句体3;
break; //break:表示中断,结束的意思,用来结束switch语句
......
default:
语句体N+1; //default:当所有情况都不匹配的时候执行该处的内容,
[break;] // 跟if语句的else相似。
}
break关键字:
含义:结束
应用位置:switch语句中、循环中。
continue关键字:
含义:跳过
应用位置:循环中
1.for循环和while循环先判断条件是否成立,然后决定是否执行循环体
2.do…while循环先执行一次循环体,然后判断条件是否成立,是否继续执行循环体。
1.for循环结束后,for循环中初始化语句变量无法在进行使用。
2.while循环结束后,while循环中初始化语句变量可以继续使用。
1.有明确循环次数的时候使用for循环
2.不明确循环次数的时候使用while循环
3.do…while循环,很少使用。
数组指的是一种容器,可以用来存储同种数据类型的多个值。
数据类型【】 变量名 = new 数据类型【长度】
动态初始化:手动指定数组的长度,由系统为数组自动分配初始值。
格式:数据类型【】 变量名 = new 数据类型【数组长度】;
使用场景:只明确元素个数,不明确具体数值,使用动态初始化。
静态初始化:手动指定数组要存储的元素,系统会自动计算出该数组的长度。
格式:数据类型【】 变量名 = new 数据类型【】{数据1,数据2,数据3,…};
简化格式:数据类型【】 变量名 ={数据1,数据2,数据3,…};
使用场景:需求中已经明确要操作的具体数据,直接可以静态初始化。
栈内存:方法运行时。进入的内存,局部变量都存放于这块内存当中。
堆内存:new出来的内容都会进入堆内存,并且会存在地址值。(每new一次都会产生一个新空间,并且地址值不重复)
方法区:字节码文件(.class文件)加载时进入的内存。
本地方法栈:调用操作系统相关资源。
寄存器:交给CPU使用的。
整数类型:0
浮点数:0.0
布尔: false
字符: 空字符
引用数据类型: null
多个数组内存图:每new一次,在堆内存中,都是一块新的空间,堆内存中的空间地址不会出现重复的现象。
多个数组指向相同的内存空间:多个数组指向相同一个内存,任何一个数组对内存的改变,其他数组访问的都是修改之后的内容。
索引越界:访问了数组中不存在的索引,造成索引越界的问题。
空指针异常:访问的数组已经不再指向堆内存,还在使用数组访问其元素,就会造成空指针异常。
遍历:将数组中所有的内容取出来,遍历指的是取出数据的过程。
方法:可以完成某个特定功能得代码块。
方法得优点:提高代码得复用性。
形参:形式参数,指的是方法定义中的参数。
实参:实际参数,指的是调用方法传递的参数。
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关键字即可)
使用成员变量:对象名.变量名
使用成员方法:对象名.方法名
当堆内存中,对象或数组产生的地址,通过任何方式都不能被找到的时候,就会被判定为内存中的“垃圾”,垃圾会被Java垃圾回收器,空闲的时候自动进行清理。
区别 | 成员变量 | 局部变量 |
---|---|---|
类中位置不同 | 在类里面方法外面 | 在方法里面或者方法声明上(比如:形参) |
内存中位置不同 | 堆内存 | 栈内存(因为方法在栈内存中) |
生命周期不同 | 随着对象的存在而存在,随着对象的消失而消失 | 调用方法的时候,方法入栈就存在,方法的调用完毕出栈就消失 |
初始化值不同 | 有默认的初始化值 | 没有默认的初始化值,必须先定义,赋值,才能使用 |
封装、继承、多态
简单来说关键字private的作用就是:把类中的属性进行私有化。
this:代表所在类的对象引用。作用就是:可以用来区分局部变量和成员变量同名的问题
在创建对象时,自动执行的方法称为构造方法。
在new对象时,JVM会自动调用所创建对象中的构造方法。另外构造方法不能手动调用
1.方法名与类名相同,大小写也要一致
2.没有返回值类型,连void都没有
3.没有具体的返回值(不能由return返回数据)
给类中的私有成员变量初始化值(实例化对象)
1.如果没有定义构造方法,系统将给出一个默认的无参构造方法。如果定义了构造方法,系统将不再提供。
2.构造方法的重载:如果自定义了带参构造方法,还要使用无参的,那么需要手动给出一个无参的构造方法
3.无论是否使用,都要手动书写无参和带参的构造方法
String是一个类(不是java的基本数据类型)
String属于(java.lang)包下,使用的时候不需要导包
java程序中所有的双引号字符串,都是String类的对象
字符串在java中属于常量,常量不能修改
在使用javac.exe工具,对.java文件进行编译时:程序中使用“+”符合,连接的常量值,会进行合并运算
以“”方式给出的字符串,只要顺序和大小写相同,无论在程序中出现多少次,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是一个可以改变的字符串类,可以把它当作是一个容器,String类是一个不可改变的字符串类。
public StringBuilder():创建一个空的容器,不含有任何内容。
public StringBuilder(String str):根据字符串的内容,来创建带有初始化值的容器
append(任意类型):添加数据,并返回对象本身。 append(追加的意思)
注意:任何数据在存储到StringBuilder中时,全部都是按照字符来存储的。
reverse():将容器中的数据进行反转,并返回对象本身。 reverse(反转的意思)
length():返回长度。
toString():通过toString()可以把StringBuilder转换为String。
相同点:都是存储数据的容器
不同点:数组的容量是固定的,集合的容量是可变的
集合的弊端:集合中只能存储引用类型(8种基础类型不能存储)
构造方法: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种基础类型不能存储)
构造方法: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():返回集合中元素的个数