JavaSE基础


day1

IDEA常用快捷键

main: 快速写出一个main 方法/psvm/sout  :写一个快速输出语句
Ctrl +D 快速复制倒下一行 
Ctrl+Y 反撤销   
Ctrl+x 删除当前行   
Ctrl+Alt+L  快速格式化代码   
Alt+Shift  +上 下箭头  上下移动光标所在行 
Shift +Enter  光标所在行的 任意位置换行 
ctrl+/ ,ctrl+Shift+/  对代码进行注释

注释

//  单行注释
/**/ 多行注释
/***/文本注释、文档注释
注释特点:1 影响程序的执行
        2 注释不参与编译

JRE 和 JDK

JDK的操作文档 Java Development Kit 17 Documentation

JRE ,JDK和JVM的关系?
        JDK 包含 ( JRE 和开发工具)   JRE 包含(JVM 和核心类库) 

变量的定义与使用

 1, 变量的定义格式   :数据类型  变量名 = 数据值;
    总结:变量就是内存中的空间,内存存储着不断变化的数据。
    变量是内存中的一块区域,用来记住一个数据
        
 2,变量的注意事项
   ① 变量要先申明,才能使用
   ②什么类型的变量,只能存储什么类型的数据
   ③变量存在访问范围,同一个范围内,多个变量的名字不能一样
   ④变量定义时可以不给赋初始值,但是在使用时,变量里必须有值
   
 3.定义float 和 long 变量的注意事项
         定义float 类型变量的时候 :需要在数值后面加入f 的标识 可以大写 也可以小写
     定义long 类型变量的时候:需要在数值后面既加入L 的标识符     尽量大写;  
   变量的作用域范围
   
 4.变量有什么特点
       变量中的数据可以被改变替换

什么是关键字

注意:关键是Java用的,不能用来作为:类型,变量名否则会报错!

标识符定义规则

基本要求 :由数字 ,字母,下划线(_) 和美元符($)组成
强制:不能以数字开头,不能是关键字,区分大小写

常见命名约定

小驼峰命名法: (方法 变量)
    标识符是一个单词的时候,首字母小写
    标识有多个单词组成的时候第一个单词首字母小写 其他单词首字母大写
大驼峰命名法:(类)
    标识符是一个单词的时候,首字母大写
    标识符有多个单词组成的时候,每个单词的首字母大写

Day2

二进制

计算机中最小的存储单位是字节 一个字节等于8个二进制位: 1B=8b
Java程序中支持写二进制,八进制 十六进制的数据分别需要0B或者0b 0 0x或者0X开头

图片,字符,音频,视频在计算机中如何存储的

1.字符数据在计算机中是怎么存的?
	字符存的是ascii码表中对应的数字的二进制形式。
	字符’A’对应的数字是 65 
	字符’a’对应的数字是 97
	字符’0’对应的数字是 48
2.图片和音视频等文件的数据是怎么存储的啊
	也是采用二进制进行存储

计算机的数据单位

计算机最小的组成单元是:字节 1B=8b
在B的基础上,计算机发展出了KB、MB、GB、TB、…. 这些数据单位。

1B =8b
1kB = 1024B
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB

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

基本数据类型又分为: 数值型和非数值型
		数值型:
			整数类型 :byte   		1个字节		(取值范围 -128~127) 
					 short  		2个字节
					 int    		4个字节     	 (取值范围  -2的31次方到2的31次方 -1),
					 long			8个字节
			浮点数类型:float(单精度)	4个字节
					 double(双精度)	8个字节
			字符类型:char 				2个字节
			布尔类型:boolean			1个字节
			
引用数据类型:类(class)
		    接口(interface)
		    数组([ ])	
		    字符串 String

自动类型转换的其他形式

1.为什么要进行类型转换
 存在不同类型的变量赋值给其他类型的变量
 
2.什么是自动类型转换
 类型范围小的变量 ,可以直接赋值给类型范围大的变量
byte -> short -> int ->long ->float -> double
                   ^
                   |
                  char 可以自动转换为int 和int 后面的数据类型
3.注意事项
表达式的最终结果类型由表达式中的最高类型决定
 
表达式中 byte short char 是直接转成int 类型参与运算的

强制类型转换成其他形式

1.什么是强制类型转换?
 默认情况下,大范围类型的变量直接赋值给小范围变量会报错
 可以强行将类型范围大的变量,数据赋值给类型范围小的变量
 数据类型 变量 = (数据类型) 变量 ,数据
2.强制类型转换有那些需要注意的?
 可能出现数据丢失
 小数强制转换成整数是直接截断小数保留整数。

算符运算

1.运算符有哪些
+ ,- ,* ,/,%
2./需要注意什么,为什么?
 如果两个整数做除法 ,其结果一定是整数,因为最高类型是整数
3.+ 除了基本数学运算,还有那些功能
 与字符串做+ 运算时会被当成链接符 其结果还是字符串
 识别技巧:能算则算,不能算就在一起 

自增自减运算符

注意:++ -- 只能操作变量 , 不能操作字面量
自增 ++ :放在某个变量前面或后面 ,对变量自身的值加1
自减 --: 放在某个变量前面或后面,对变量自身的值减1

1.作用 ,需要注意什么?
	++ --:对当前变量值+1 -1
	只能操作变量,不能操作字面变量
	
2.自增、自减运算符放在变量前后有区别吗?
	如果单独使用放前放后是没有区别的。
	非单独使用:在变量前 ,先进行变量自增/自减,再使用变量。
	非单独使用:在变量后 ,先使用变量,再进行变量自增/自减。

赋值运算符

注意:扩展的赋值运算符隐含了强制类型转换
赋值运算符有: += -= *= /= %= (从右往左看)

作用 和特点:
+= 可以实现数据的累加,把别人的数据加给自己
扩展的赋值运算符自带强制类型转换。

关系运算符

注意:在Java中判断是否相等一定是“==” 千万不要把 “==“ 误写成”=“

	>	a>b	判断a是否大于b	成立返回true、不成立返回false

	>=	a>=b	判断a是否大于或者等于b	成立返回true、不成立返回false

	<	a<b	判断a是否小于b	成立返回true、不成立返回false

	<=	a<=b	判断a是否小于或者等于b	成立返回true、不成立返回false

	==	a==b	判断a是否等于b	成立返回true、不成立返回false

	!=	a != b	判断a是否不等于b	成立返回true、不成立返回false

逻辑运算符

注意:在Java中”&“ ,”|“ 无论左边fasle 还是true  右边都要执行
符号	叫法			例子				运算逻辑
&	 逻辑与	2 > 1 & 3 > 2	多个条件必须都是true, 结果才是true;  有一个是false,结果就是false
|	逻辑或	2 > 1 |  3 < 5		多个条件中只要有一个是true, 结果就是true;
!	逻辑非	   ! (2 > 1)		就是取反:你真我假,你假我真。!true == false、!false == true
^	逻辑异或	2 > 1 ^ 3 > 1	前后条件的结果相同,就直接返回false,前后条件的结果不同,才返回true

符号	叫法			例子						运算逻辑
&&	 短路与	2 > 10 && 3 > 2		判断结果与“&”一样,过程不同:左边为 false,右边则不执行。
||	 短路或	2 > 1 | | 3 < 5		判断结果与“|”一样,过程不同:左边为 true, 右边则不执行。

注意:由于&& || ! 运算效率更高,在开发中用到的更多

三元运算符 和运算符的优先级

条件表达式? 值1 :值2;

运算符优先级是先从逻辑运算两边开始
()的优先级高 , &&的优先级高于 ||

API文档

API是什么?API文档是什么?
	Application Programming Interface,应用程序编程接口:Java写好的程序,咱们可以直接调用。
	Java提供的程序使用说明书。
Java程序中如何实现接收用户键盘输入的数据?
	使用Java提供的Scanner来完成,步骤如下:
	1、导包:import java.util.Scanner;
	2、抄代码得到扫描器对象: Scanner sc = new Scanner(System.in)
	3、抄代码等待接收用户输入的数据:
	int age =  sc.nextInt(); 
	String name = sc.next();

Day3

分支结构

if语句

if 语句第一种形式
①  if(条件表达式){
		代码块;
}

如果如果前一条语句不能输出 ,则输入出下条语句
②if(条件表达式){代码块;}else if{代码块;}

③if(条件表达式){代码块;}else if{代码块;} ... else if(){...}

作用有 :可以根据条件,选择执行某段程序

if分支写法有几种,特点是?
3种 1 ,是条件满足则执行 ,否则不执行
	2 是条件满足则执行 ,不满足则执行下一个条件
	3是条件满足则执行 ,不满足则执行下一个条件

witch语句

一 switch 分支 (是通过比较值来决定执行那条分支)

二 switch 分支执行流程
① System.out.println("请输入密码:");
②与哪个case后的值匹配为true就执行哪个case块的代码,遇到break就跳出switch分支。
③如果全部case后的值与之匹配都是false,则执行default块的代码。

三 if switch 的比较
if在功能上远远强大于switch
当前条件是区间的时候,应该使用if 分支结构
当前条件是与一个一个的值比较,switch 分支更合适:格式更良好,代码性能更良好,优雅

switch 注意事项

①表达式类型只能是byte、short、int、char,JDK5开始支持枚举,JDK7开始支持String、不支持double、float、long。
②case给出的值不允许重复,且只能是字面量,不能是变量。
③正常使用switch的时候,不要忘记写break,否则会出现穿透现象。

switch的穿透可以解决的问题

存在多个case分支的代码是一样时,可以把代码写到一个case块,其他case块通过穿透性能,穿透到该case块即可,这样可以简化代码。

for循环

for 循环格式
  for (初始化语句;循环条件;迭代语句){ 循环语句体(重复的带代码)}

执行流程:先执行初始语句 ,在执行循环条件,然后然后执行循环体  最后执行迭代语句 

for循环的应用场景
需要重复执行的代码,都可以放在循环语句中

while循环

初始话语句 (while循环的格式)
while(循环条件){
	循环体语句(被重复执行的代码)
	迭代语句
}
注意:不知道循环多少次是使用while

总结:

for 和 whlie使用总结
	其实while能做的for都能实现,for能做的while也都能实现,功能上无区别。
 	使用规范:如果一开始不知道循环次数的情况下,建议使用while循环解决更专业。一开始就知	道循环几次的情况下,使用for循环来解决更专业。

do ... while 循环

**先进行循环体 再进行判断  
do{
	循环体语句;
	迭代语句;
}while(循环条件)
***特点:先执行,后判断

三种循环的区别

for 循环和whlie循环(先判断后执行) do...whlie(先执行后判断)

for循环和whlie循环的执行流程是一模一样的,for能做的whlie也行 ,反之亦然

使用规范:如果已知循环次数建议使用for循环 ,如果不清楚多少次建议使用whlie

其他区别:for循环中,控制循环的变量只在循环中使用,whlie循环中,
控制循环的变量在循环后还可以执行

死循环

for ( ; ; ) {
	System.out.println("Hello World1");
}

// 经典写法
while (true) {
	System.out.println("Hello World2");
}

do {
	System.out.println("Hello World3");
} while (true);
注意:死循环的三种写法

循环嵌套

for(int i = 0; i < 3; i++) {
     for(int j = 0; j < 5; j++) {
    	 System.out.println("我爱你");
     }
}
循环嵌套的特点:外部循环每一次,内部循环会全部执行完成一轮

(重点)break 和Continue的区别

break :跳出挡前循环的执行 能用于switch 和循环 用于switch 是为了防止switch穿透
continue:跳出本次循环,执行下次循环 ,只能用于循环

Day4

数组(静态的数组定义格式)

数组完整的格式
	数据类型[] 数组名 = new 数据类型[]{元素1,元素2 ,元素3… };
简化格式
数据类型[] 数组名 = {元素1,元素2 ,元素3… };

注意:定义数组的注意事项?
	1.数组类型[]数组名 也可以写成 数组类型 数组名 [];
    2.什么类型数组只能存放什么类型的数据
    3.数组一旦定义完成 类型确定 长度固定 不可以发生改变
    4.数组中既可以存储基本数据类型,也可以存储引用数据类型

数组是属于什么类型?数组变量名中存储的是什么?
引用数据类型
存储的是数组在内存中的地址信息

数组访问

1.如何访问数组的元素
    数组名称[索引]
2.数组访问的长度
    数组名称.lenght
3.数组的最大索引是
    数组名.lenght-1
4.访问数组时 超过最大索引会报异常
    异常信息是:java.lang.ArrayIndexOutOfBoundsException(数组下标越界或数组索引越界)

数组遍历

数组的遍历:就是将数组容器中的数据挨个取出
如何遍历数组
   	 int[] ages = {18, 20, 25, 30};
		for (int i = 0; i < ages.length; i++) {
       		 System.out.println(ages[i]);
    }

 

动态初始化数组

注意:动态初始化和静态初始化是两种不同的写法
    
动态数组初始化数组的写法格式和特点:
    数据类型[]数组名 = new 数据类型[长度];
1.动太初始数组后元素的默认值是?
    byte,short,int,char,long 类型数组元素默认值都是0
    float,double 类型数组元素的默认值都是0.0
    boolean类型数组的元素默认值是false,String类型数组的元素的默认值是null
2. 两种数组定义的方法各自适合的业务
    动态初始化:适合开始不确定具体元素值,只知道元素个数的业务场景
    静态初始化:适合一开始就知道要存入那些元素值的业务场景

 

数组在计算机中的执行原理

Java程序运行主要看jvm的那个几个区域
 方法区(存放.class 文件的)
 栈内存
 堆内存

多个变量指向同一个数组的问题

多个数组变量,指向同一个数组对象的原因是什么?需要注意什么?
	多个数组变量中存储的是同一个数组对象的地址。
	多个变量修改的都是同一个数组对象中的数据。
	
如果某个数组变量中存储的null,代表什么意思?需要注意什么?
	代表这个数组变量没有指向数组对象。
	可以输出这个变量,但是不能用这个数组变量去访问数据或者访问数组长度,
	会报空指针异常:NullPointerException。

数组常见案例

数组求最值

public class ZuiDaZhi {
    public static void main(String[] args) {
        int[] faceScores = {15, 9000, 10000, 20000, 9500, -5};
        int faceMax = faceScores[0];
        for (int i = 1; i < faceScores.length; i++) {
                if (faceScores[i]>faceMax){
                    faceMax =faceScores [i];
            }
        }
        System.out.println(faceMax);
    }
}

Day5

方法定义,调用

方法是什么?
    方法是一种语法结构,它可以把一段代码一个功能,以便重的调
定义方法的格式
  修饰符  返回值类型  方法名 (形参列表){
  		方法体代码
  		  return 返回值;
  }
方法要执行 必须 进行调用 以定义的方法名进行调用
使用方法有什么好处
    提高代码的复用性,提高开发效率使程序逻辑跟清晰
    
注意事项:
    如果方法不需要返回数据,返回值类型必须声明void (无返回值声明)
    方法如果不需要接收数据,则不需要定义形参,且调用方法时也可以传数据给方法了 
    没有参数 且没有返回值类型(void)声明的方法,称为无参数,无返回值的方法依次类推

如果方法不需要接受数据处理,不需要返回数据应该怎们办?
    方法不需要接受数据,则形参列表可以不写,方法不需要返回数据则声明返回值类型为void
    方法没有声明具体的返回值类型(void)内部不能使用return返回数据
    方法如果没有形参列表,掉用的时候不能传入参数值,否则报错

方法使用时的常见问题

方法在类中的位置放前放后无所谓。

方法与方法之间是平级关系,不能嵌套定义。

方法的返回值类型写void(无返回声明)时,方法内不能使用return返回数据,
如果方法的返回值类型写了具体类型,方法内部则必须使用return返回对应类型的数据。

return语句的下面,不能编写代码,属于无效的代码,执行不到这儿。

方法不调用就不会执行,  调用方法时,传给方法的数据,必须严格匹配方法的参数情况。

(重点)调用有返回值的方法,有3种方式:
	1、可以定义变量接收结果 
	2、或者直接输出调用,
	3、甚至直接调用;
调用无返回值的方法,只有1种方式:1、只能直接调用。

方法在栈内调用的执行原理

1。方法的运行区域在哪里?
  栈内存
2.栈有什么特点方法为什么要在栈内运行自己
  先进后出
  保证一个方法调用完另一个方法后,可以继续执行当前方法中的代码

Java的参数传递机制

基本类型的参数传递
	基本类型和引用类型的参数在传递的时候有什么不同
		都是值传递
		基本类型的参数传输存储的数据值
		引用类型的参数传输存储地址值
引用类型的参数传递
	方法需要声明返回值类型:int
	方法需要定义形参列表

(重点)方法重载

什么是方法重载
1.一个类中,多个方法的名称相同,但他们形参列表不同
特点
一个类中,只要一些方法名称相同,形参列表不同,那么它们就是方法重载
其他,的都不需要管
形参列表不同指得是:形参的个数,类型,顺序不同,不关心形参的名称

重载的场景应用
	开发中为一类业务处理,处理一类业务提供多种解决方式时使用重载方法来设计
在这种场景下使用方法重载的好处?
	对于相似功能的业务场景使用方法重载可读性好
	方法名称相同提示是同一类型的共能,通过形参不同实现功能差异化的选择 是一种专业的代码设计

return关键字(比较重要)

return:跳出并立即结束所在方法的执行

breank和continue的区别?
breank:跳出并结束当前所在循环的执行
continue:结束当前循环,执行下一次循环

Day6

面向对象编程

1.面向对象编程有什么好处?
 凡事找对象的编程套路,更加符合人的思维
2.对象是什么?如何得到?
 public class 类名{
 	1。变量用来说明对象可以处理什么数据
 	2.方法描述对象有什么功能, 也以对数据进行处理

 }
3.面向对象编程是?
 万物皆对象

类在对象的执行

对象在计算机中的执行原理是这么回事?
Student s1 = new Student();
每次new Student(),就是在堆内存中开辟一块内存区域代表一个学生对象。
s1变量里面记住的是学生对象的地址。

引用类型如何识别

Student s1 =new Student();
s1 变量中存储的对象的地址,因此s1被称为引用类型的变量

类和对象的注意事项

类名建议英文单词,首字母大写,满足驼峰模式 且要有意义 
类中定义的变量也称为成员变量(对象属性)类中定义的方法也称成员方法
成员变量本身存在默认值,同学们在定义成员变量时一般来说不需要赋初始值(没有意义)

一个代码文件中,可以写多个class类,但只能一个用public修饰,且public修饰的类名必须成为代码文件名。
对象与对象之间的数据不会相互影响,但多个变量指向同一个对象时就会相互影响了。
如果某个对象没有一个变量引用它,则该对象无法被操作了,该对象会成为所谓的垃圾对象。

this(重要)

什么this?

this就是一个变量,可以用在方法中,来拿到当前的对对象

this的应用场景?

解决:局部变量和成员变量的命名冲突

this是关键字(重点)

1.this关键是什么?
	this是一个变量。可以用在方法中。用来拿当前对象,
	那个方法调用,this就指向哪个对象,也就是拿到当前对象。
2.this关键字在实际开发中常用来干什么?
	用来解决对象成员变量与方法内部变量的名称一样时,导致访问冲突问题。

构造器

构造器的格式

构造器是什么样子?
 修饰符  类名(形参列表){
 		
 }

作用是 :一种特殊的方法,定义在类中的,用来初始化一个类对象,并返回对象地址

构造器特点和分类
无参数构造器(默认存在的):初始化对象时,成员变量的数据均采用默认值
有参构造器:在初始化对象的时候,同时可以接收参数为对象进行赋值

构造器的注意事项

构造器的名字必须和类名保持一致
定义构造器的时候一定不能写返回值类型,void也不行
如何定义出来,默认值就自带了午餐构造器,写不写都有
一旦定义了有参数构造器,那么无参数构造器就没有了,如果还想有参构造器,此时就需要自己动手写一个
无参构造器

封装

1.什么是封装
 	就是用类设计对象处理某一个事物的数据时,把要处理的数据,
 	以及处理这些数据的方法,设计到一个对象中去。
	面向对象的三大特征:封装、继承、多态。
	
2、封装的设计规范是什么样的?
	合理隐藏,合理暴露。
	
3、代码层面如何做到合理隐藏、合理暴露?
	合理隐藏:一般建议对成员变量使用private(私有、隐藏)关键字进行修饰。
	合理暴露:必要的时候为成员变量提供public修饰的的getter、setter方法暴露其取值和赋值。
	成员方法根据是否需要在当前类外面访问决定使用private隐藏还是使用public对外暴露。

实体JavaBean

1.什么是实体类?有什么特点
 成员变量必须私有,且要为他们提供get,set 方法,根据需求提供无参构造器和有参构造器
 仅仅只是一个用来保存数据的Java类 可以用它创建对象,保存某个事物的数据

Day7

常用的API

API就是别人写好的程序 ,直接调用就可以解决问题

什么是包?

包是用来分门别类的管理各种不同程序的。类似于文件,建包有利于程序的管理和维护
 建包的语法格式
  package com.it.javabean;
public class Student{ }

自己程序中调用其他包下的程序的注意事项
    1.如果当前程序中,要调用自己所在包下的其他程序,可以直接调用。(同一个包下的类,互相可以直接调用)
    
	2.如果当前程序中,要调用其他包下的程序,则必须在当前程序中导包,
	才可以访问!导包格式:import 包名.类名;

	3.如果当前程序中,要调用Java提供的程序,
    也需要先导包才可以使用;但是Java.lang包下的程序是不需要我们导包的,可以直接使用。
        
	4.如果当前程序中,要调用多个不同包下的程序,而这些程序名正好一样,
    此时默认只能导入一个程序,另一个程序必须带包名访问。

String

1.String 是什么,可以做什么?
  代表字符串,可以用来创建对象封装字符串数据,并对其进行处理
2.String类型创建对象封装字符串数据的方式有?
 方式一:直接使用引用
 方式二:new String 类,调用构造器初始字符串对象

String 中常用的方法

字符串内容比较

(重点)equalsIgnoreCase,equals 和 == 的区别?

equalsIgnoreCase :忽略字符串大小写
 equals : 比较的是字符串内容 是否相同
 == :比较的是基本数据类型的值 是否相等

String类对象在内存中的存储原理

两种创建字符串的方式产生的对象分别在
只要是以  方式写出的字符串对象,会存储到字符串常量池中,且相同内容的字符串只存储一份
但通过new 方式创建字符串对象 每new一次会产生一个新的对象放在堆内存中

String类对象的特点:不可变性

1.String类产生的对象有一个重要特性  “不可变性”
2.String是不可变字符串的原因
 String 变量每次的修改其实都是产生指向了新的字符串对象
 原来的字符串都是没有改变的 ,所以称为不可变字符串

ArrayList

集合概述,ArrayList 是

1、集合是什么?
	集合与数组类似,也是一种容器,可以用来存储数据

2、数组和集合的元素存储数据的类型和个数有什么特点?
	数组定义后类型确定,长度固定
	集合类型可以不固定,大小是可变的

3、数组和集合适合的场景 ?
	数组适合做数据个数和类型确定的场景
	集合适合做数据个数不确定,且要做增删元素的场景

ArrayList集合快速入门

ArrayList类如何创建集合对象的,如何添加元素
   ArrayList list = new ArrayList<>();

往ArrayList中添加数据 ?
public boolean add(E e) (直接添加)
public void add(int index,E element)(索引添加)

ArrayList 对于泛型的支持

使用泛型:<数据类型>
创建集合对象都应该使用泛型。
ArrayList<String> list1 = new  ArrayList<>();
注意:
	泛型只能支持引用数据类型,不支持基本数据类型。

ArrayList常用API,遍历

 

ArrayList集合案例:遍历并删除元素

从集合中遍历元素,并筛选出元素删除它,应该如何操作才能不出bug?
	方式一:每次删除一个数据后,索引-1。
	方式二:从集合后面遍历然后删除,可以避免漏掉元素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值