学习总结(2021.1.4-2021.1.8)

1.4Day05:IDEA快捷键,if格式2的嵌套,键盘录入不同数据类型的细节,循环结构switch.for.while.do while,for循环嵌套,死循环

1. IDEA快捷键(持续更新):

alt+enter:代码提示/导包
ctrl+d—复制行
ctrl+x—删除行
ctrl+shift+/:添加多行注释或取消多行注释
ctrl+/:添加单行注释或在去取消单行注释
shift+f6:修改类名,包名等
ctrl加左键:打开源码或者方法
ctrl+z:撤销
ctrl+shift+z:前进

2. if格式2的嵌套(不推荐使用此方法):

  • 格式
if(表达式){
     
if(表达式1){
      }else{
     } 
}
else{
     
 if(表达式2){
     }else{
      }
 }

例如:比较三个数最大数

if(a>b){
     
if(a>c){
     a}else{
     c}
}
else(a<b){
     
if(b>c){
     b}else{
     c}
}

3. 关于键盘录入不同类型数据的细节:

1)分别录入两个int类型,输出
2)分别录入两个String类型(字符串类型),输出
3)先录入String,在录入int类型
4)先录入int类型,在录入String类型,存在的问题:字符串数据会被漏掉
原因:先录入int-按回车符号-字符串-直接录入(回车符号问题)
解决办法:

  • 方案1:public String next(); :通用方法:录入字符串

  • 方案2:在录入下一个String类型之前,重写创建一个新的键盘录入对象

Scanner x = new Scanner(System.in) ;
String  b = x.nextLine() ;

4. 选择结构语句switch的标准结构:

	switch(表达式){
     
	case1:语句1;
	break ;
	case2:语句2;
	break ;
 	....
	default:语句n+1;
break ;  }

5. switch后面的表达式可以是什么样的数据类型?

1)最基本的:byte,short,int,char
2)JDK5以后可以是枚举类型
3)JDK7以后可以是String类型 (引用类型)

6. switch语句中的注意事项:

1)case语句的后面只能是常量,不能是变量
2)break的意思: 结束,中断
3)switch语句的结束条件:

  • 遇见break结束
  • 程序默认执行到末尾

4)default语句可以放在switch语句中的任何位置,不影响程序的流程,但是如果在语句中,break不能省略的,如果在末尾,break 可以省略
5)case穿透现象:没有遇见break,不会和case进行比较,直接依次执行
6)switch首先会和case依次比较,之后无匹配再执行default

7.循环结构语句:for循环,while循环,do-while循环

8. for循环的格式:

for(初始化语句;条件判断语句;控制体语句)
{
     循环体语句;}

9.while循环的格式:

初始化语句;
	while(条件判断语句)
{
     循环体语句;
	控制体语句; }

10.while和for的区别:

1)格式不同
2)从内存角度考虑:

  • for循环:在for循环语句外面是不能够访问变量的,因为它随着for循环执行完毕,main方法结束之后,变量就会被GC(垃圾回收器)回收掉这些变量

  • while循环:循环结束,依然可以从外部访问变量,因此在内存中占用资源空间大于for 循环

3)如果明确循环次数,优先使用for,不明确循环次数,使用while循环

11.死循环:在循环的过程中,没有控制变量,导致程序中永远"恒成立"

  • 格式:
for(;;){
     语句;}
while(true){
     语句;}

12.do-while循环格式:

初始化语句;
	do{
     循环体语句;控制体语句;}
while(条件表达式) ;

13.do-while循环和for循环以及while循环的最大的区别:循环体至少执行一次

14.for循环嵌套:将内层循环看成是外层循环的循环体语句

  • 格式:
	for(初始化语句;条件表达式;控制体语句)
{
     for(初始化语句;条件表达式;步长语句){
     循环体语句;}
循环体语句;}

1.5Day06:随机数的获取,跳转控制语句,用于循环的标签语句,方法,方法重载

1.获取1-100随机数,用math操作?

int a=(int)(math.random()*100+1)

2.跳转控制语句

1)break :中断,结束;单独不能使用,在循环中和switch中用
循环中使用:单层循环中或for循环嵌套中使用
2)continue : 继续(循环中使用,结束当前循环,立即进入下一次循环)
使用:循环中使用
3)return :结束方法(和方法相关)或者返回值
使用:结合方法使用,很少单独使用

3.标签语句,用于循环,在外层循环和内层循环的外面使用

  • 格式:

标签名:外层循环/内层循环
例如:

wc:for(){
     
nc:for(){
     }
}

4.break后面可以跟标签名称

例如:break wc;

5.方法:将共性内容抽取出来,使用{}包裹起来,为{}起名字即方法(一个独立的代码块)

方法有两种格式:

1)第一种:有具体返回值(数据类型)的方法:

  • 格式 :

权限修饰符 + 静态修饰符 + 返回值类型 + 方法名(数据类型1 变量名1 ,数据类 型2 变量名2 ,…){业务逻辑;return结果; }

  • 调用方法:

单独调用:(没有输出)没有意义;例如:sum(a,b) ;
输出调用:输出写死了,不利于值的进一步操作;例如:System.out.println(sum(a,b)) ;
赋值调用(推荐):例如:int result =sum(a,b) ;
2)第二种:没有具体返回值类型的方法

  • 格式:

权限修饰符+静态修饰符+返回值类型(void)+方法名(形参列表){输出操作}
Java语法规定:当一个方法没有具体返回值类型的时候,使用void 代替

  • 调用方法:

单独调用(推荐);例如:printstar(a,b) ;

6.定义方法两个明确:

1)明确返回值类型
2)明确参数类型以及参数个数

7.定义方法的注意事项:

1)方法与方法是平级关系 ,不能在一个方法中定义另一个方法
2)Java是强类型语言,定义形式参数时必须携带数据类型
3)调用方法的时候,实际参数如果定义数据类型了,传递参数不需要携带数据类型
4)目前我们定义的方法都是有方法体的 (有左大括号"{ 的地方不能有分号; 有分号;的地方不能有左大括号"{" )

8.方法重载 (overLoad):多个方法的方法名相同,参数列表不同,与返回值无关,将这些方法称为"方法重载"

其中参数列表不同有两种情况:
1)参数个数不同
2)参数类型不同

1.6Day07:数组,Java中的内存分配,变量生命周期

1.数组:能够存储同一种类型元素的容器

  • 格式:
    数据类型[] 变量名称
    例如:int[] arr
    数据类型 变量名称[]
    例如;int arr[]

  • 数组缺点:长度固定,不满足长度的变化的需求

数组的两种初始化:

1)第一种初始化:动态初始化:给定数组的长度,元素由系统默认初始化

  • 格式:

数据类型[] 数组名称= new 数据类型[长度]
例如:int[] arr=new int[3]
数据类型 数组名称[]= new 数据类型[长度]
例如:int arr[]=new int[3]
其中[]:表示一维数组

  • 动态初始化后默认值:

基本数据类型:整数类型:默认int,默认值0
      浮点类型:默认double,默认值0.0
      字符类型:char,默认值’\u0000’
      布尔类型:boolean,默认值:false
引用数据类型:数组.类.接口:默认值:null
2)第二种初始化:静态初始化:指定具体元素的内容,系统默认分配长度

  • 格式:

数据类型[] 数组名称=new 数据类型[]{元素1,元素2,元素3…}
数据类型 数组名称[]=new 数据类型[]{元素1,元素2,元素3…}
简写格式:
数据类型[] 数组名称={元素1,元素2,元素3…}
数据类型 数组名称[]={元素1,元素2,元素3…}

2.引用类型数据:一旦对象创建了,地址值将永远固定,除非重新new一个新的对象,才产生一个新的地址

3.数组名称.lenght:获取数组长度

4.Java中的内存分配:

1)栈内存:存储局部变量,在方法声明上或者方法定义中的变量
进出方式:先进后出(与之相对的队列进出方式为:先进先出)
进栈方式:压栈
出栈方式:弹栈
2)堆内存:存储new(创建对象)出来的东西
3)方法区:字节码文件区域,静态区域,字符串常量区域

5. 局部变量的生命周期:随着方法调用存在和消失 new(创建对象)的生命周期:创建后堆内存中会产生地址,一旦地址创建将永远不会改变,是引用数据类型,需要等待垃圾回收器回收

6数组中常见的异常:

1)NullPointerException:空指针异常:
某个对象已经null了,我们还试图去访问这个对象中的方法或者它里面的属性,就会 产生这个问题
例如:

Scanner sc = new Scanner(System.in) ;
		sc = null ;
		sc.nextInt() ;  
		//程序一运行,当前行代码产生一个异常

解决方案:针对某个对象进行非空判断.
2)ArrayIndexOutBoundsException :数组角标越界异常,属于IndexOutBoundsException 子类
出现的原因:访问了不存在索引值或者程序运行的时候,角标值已经超出了范围
例如:

int[] arr = {
     1,3,4} ;
System.out.println(arr[3]) ;
for(int x = 0 ; x <= arr.length ; x ++){
     } :
//取不到数组的长度

解决方案:检查角标值,更改代码

1.7Day08:基本数据类型和引用数据类型作为形式参数传递的特点,类,面向对象

1.基本数据类型和引用数据类型作为形式参数传递的特点:

1)基本数据类型:
基本类型作为形式参数传递,形式参数的改变不会影响实际参数
2)引用数据类型:
引用类型(数组,类,接口) 作为形式参数传递时会改变实际参数

2.类:Java中的最基本单元,是描述现实世界事物的属性和行为的集合

  • 格式:


事物的属性(成员变量):在类中,方法外
事物的行为(成员方法):方法分两种
1)public 有返回值类型 方法名(形式参数列表){业务逻辑;return 结果;}
2)public void 方法名(形式参数列表){输出操作}

  • 测试类:

创建对象的格式:类名 对象名=new 类名() ;
例如:Student baiCai = new Student() ;
修改成员变量:对象名.成员变量=赋值;
访问成员方法:对象名.方法名() ;

3.对象:指定的某个类中具体的事物

4.Java面向对象

  • 思想特点:

1)更符合生活中的思想行为习惯
2)将复杂的事情简单化
3)让我们从执行者变成指挥者(角色发送变化了)

  • 特征:

封装.多态.继承

  • 语言设计原则:

可以不断的创建对象,使用对象,然后指挥对象做事情

1.8Day09:局部变量和成员变量的区别,匿名对象,private封装,this关键字

1.局部变量和成员变量的区别:

1)在类中书写的位置不同:
局部变量:方法定义中或方法声明上
成员变量:类中,方法外
2)内存中的位置位置不同:
局部变量:在栈内存中
成员变量:在堆内存中
3)生命周期不同:
局部变量: 随着方法调用而存在,随着方法调用完而消失
成员变量: 随着对象的创建而存在,对象创建完毕后,要等待垃圾回收器回收(空闲 的时候)
4) 初始化不同:
局部变量:必须要在使用之前赋值
成员变量:系统会默认初始化

2.String类作为形参传递,形参的改变不影响实际参数

3.匿名对象:没有名字的对象

  • 格式:
new 类名() ;
  • 应用场景:

在移动端使用居多,Android :基于Java (大部分都是使用匿名对象,以节省内存)
特点:
1)匿名对象:使用完毕,会立即被垃圾回收器回收,节省内存空间
2)开发中,匿名对象使用一次即可,不要使用多次
3)匿名对象可以作为参数传递

4.private(封装):将一个类中的成员变量私有化,对外提供公共的访问方法,来保证类的安全性

  • 目的:为了外界不能够直接访问
  • 特点:被private修饰的成员变量,成员方法只能在本类中访问,外界类不能访问
    外界类访问private的变量或方法的方式:通过公共的方法间接访问私有的变量或方法

5.this:解决局部变量和成员变量无法区分的问题,代表当前这个类的对象的地址值引用

你可能感兴趣的:(Java,java,编程语言)