走进Java
循环语句
if…else…和三元运算符的区别
1.共同点:都是针对两种情况进行判断,都有表达式
2.不同点:if...else...范围大,不仅可以操作数据值,还可以用操作输出语句去完成逻辑判断;
而三元运算符仅是运算符,操作两个具体的数据值,不能输出语句;
所以能用三元运算符实现的一定可以用if else, if else 能实现的三元不一定可以.
if…else…嵌套(不推荐使用)
if(表达式1){
if(表达式2){
语句1;
}else{
语句2;
}
}else{
if(表达式3){
语句3;
}else{
语句4;
}
}
流程控制语句之switch(考点很多)
格式:
switch(变量名){
case 值1:
语句1;
break;
...
default:
语句n;
break;
}
注意事项:
1.case语句只能是常量(java语言中,强语言类型)
但是在前端jsp中,switch语句中case可以是常量也可以是变量
2.在case语句中,如果一旦匹配成功一定要书写break,否则会造成穿透
3.default 语句可以在任何位置,不影响,如果在句末,break可以省略(但是不建议)
如果在句中的话,break是不可以省略的,会造成穿透
4.switch语句结束条件: 语句碰到break结束或者默认语句结束(执行完毕)
*面试题
switch语句后面的变量名可以是什么类型的变量名?
本身是可以跟基本数据类型:byte,short,int,char,在JDK5 以后可以跟枚举类型(引用类型)
JDK7以后可以跟字符串String类型 .
/* String是Java开发中特别重要的一个类,里面功能开发中使用的特别多*/
循环结构语句
for循环语句(明确范围使用for循环)
格式:
for(初始化语句;条件表达式;控制体语句){
循环体语句;(实际开发中逻辑判断)
}
求和,求阶乘的两个思想:先定义最终变量,然后for循环语句,最后输出结果变量值
统计思想:先定义结果变量,然后在循环体语句中加入变量自增(++)
while循环语句
格式:
初始化语句;
while(条件表达式){
循环体语句;
控制体语句;
}
for和while的区别;
从用法格式上看:
两个分别有自己格式,while循环体不要忽略控制体语句
是否明确循环次数(开发中优先使用for)
如果有明确的循环次数则使用for循环
如果不明确循环次数则使用while
从内存角度考虑
for循环更优一些,for循环结束,里面的局部变量也就是方法定义中的变量就被及时释放空间
whlie循环结束之后,依然能够去访问那个变量比较消耗空间
for循环嵌套(内层for循环是外层for循环的循环体)
格式:
for(初始语句1;表达式1;控制体语句1){
for(初始语句;表达式;控制体语句){
循环体语句.....
}
}
跳转控制语句
break 结束中断,不能单独使用,一般在循环体语句loop或者switch中使用,不能超过这个范围
continue 跳转控制语句,结束当前循环,立即进入下一循环(不能单独使用,在循环中用)
return 跳转控制语句,在Java中跟定义方法有关,跟有返回值类型的方法有关(很少单独使用)
return在实际开发中和方法息息相关
java中的方法
方法:将一个功能抽取出来,把代码单独定义在一个大括号内,形成一个单独的功能,当
我们需要这个功能的时候,就可以去调用,这样既实现了代码的复用性,也解决了
代码的冗余度
方法与方法是平级关系
方法一:有返回值类型的方法定义
权限修饰符 static 返回值类型 方法名(参数类型1 参数名1,....){
逻辑操作
return 结果 (返回值类型需和结果类型保持一致)
}
有具体返回值的调用有1.单独调用(没有数据结果)
2.输出调用
3.赋值调用
方法一注意事项:
1.方法与方法是平级关系,不能再一个方法中定义另一个方法
2.定义方法时,返回值类型最终和return语句结果保持一致
3.注意括号和分号
4.定义方法时,形参类型必须带上
5.调用方法时,实参要么定义,要么键盘录入,不需要再调用方法里再去书写数据类型
方法二:没有返回值类型的方法定义
权限修饰符 static void 方法名(参数类型1 参数名1,......){
逻辑操作
没有return关键字
System.out.println("XXXX");
}
方法重载(overLoad)
在同一个类中,允许存在一个以上同名方法,只是它们的参数或者参数类型不同即可
多个方法,方法名一致,参数列表不同,与返回值无关
目的就是提高代码(方法)的扩展性,同一方法可以传递不同的类型,完成具体的逻辑操作
数组
数组就是一个可以存储同一种数据类型多个元素的容器,这种类型可以是基本数类型也可以是引用数据类型
Jvm内存分配:
栈:跟方法有关,存储局部变量 堆:和new有关,开辟新的地址 方法区:字节码文件
寄存器:和系统cpu有关 本地方法区:和系统有关
创建数组:对数组进行初始化
动态初始化:给定数组长度,系统默认分配元素值
数据类型[] 数组名称 = new 数据类型[数组长度]
数据类型 数组名称[] = new 数据类型[数组长度]
静态初始化:给定数组元素,长度系统给定
数据类型[] 数组名称 = new 数据类型[]{元素1....}
数据类型 数组名称[] = new 数据类型[]{元素1.....}
简写:
数据类型[] 数组名称 = {元素1.....}
数据类型 数组名称[]= {元素1.....}
数组名称.length-----获取数组长度
数组的应用:需要掌握遍历,最值,基本元素查找.
异常
程序出问题JDK提供java.lang.Throuable----->Exception类的子类.RuntineException:运行时期异常
error:严重问题---->内存溢出
见到异常应该总结出来,什么原因导致异常,这个异常的解决方案是什么
如:
数组以及String类都会出现一种"角标越界"
*** 角标异常----->检查代码,控制索引值
*** 空指针异常----->非空判断
数组高级排序之冒泡排序(属排序算法)
冒泡排序的思想:
两两比较,较大值往后放,第一次比较完毕最大值出现在最大索引处,
依次这样比较,最终就可以得到一个排序好的数组,
规律:两两比较,较大值往后放;第一次有0个不比,第二次有一个不比....,每比一次,减少一次比较
比较的次数: 数组长度-1=比较次数(如:个元素,就比较4次)
形式参数的问题
形参假如是基本数据类型,形参的改变不影响实际参数,局部变量的声明周期(方法定义中或者方法声明上)
局部变量是随着方法的调用开始而存在,随着方法的调用结束而消失(String类是常用类中的重点),结论和基本数据类型一样
形参假如是引用数据类型,形参的改变是直接影响实际参数,因为引用数据类型(数组.类,接口)是一种空间地址进行传递
形参是引用类型(如果是类),调用这个方法,实际参数传递需要当前类的具体对象(创建类对象new)
面向对象
面向对象基于面向过程,面向过程针对具体的需求(研发)
面向对象:生活处处皆对象
面向对象的思想特点:
1.更符合现实生活中的思想行为
2.让复杂的事情简单化
3.角色发生改变,从执行者(面向过程)变成了指挥者(面向对象)
面向对象的设计理念:
不断的创建对象,使用对象,指挥对象做事情(面向对象的宗旨)
面向对象 名词提取法"UML"----->将名词提取------->"事物"------->"类"
什么是类?什么是对象?
类:
就是能够描述现实世界事物的一组事物的属性和行为的集合,Java语言中最基本的单元
类和显示世界事物是一一对应的关系
属性------>在代码中就是成员变量,而成员变量是在类中方法外
行为------>在代码中就是成员方法
对象:
描述具体事物(具体事物的具体属性和行为)
描述具体事物在代码中体现出来的具体事物----->创建类对象的格式
类名 对象名 = new 类名();
对象名.成员变量 = 值;(根据成员变量的类型赋值) 访问成员变量,赋值
对象名.方法名(): 访问我们自己定义的成员方法,去使用它展示数据或者实现具体的业务需求
在一个类中需要访问令一个类,就必须创建这个类对象
类名.对象名 = new 类名();
局部变量和成员变量的区别
1.书写位置不同:
局部变量:在方法定义中或者方法声明上
成员变量:在类中方法外
2.内存位置不同:
局部变量:在栈内存中----->跟方法有关(方法进栈)
成员变量:在堆内存中----->跟对象有关(new)
3.生命周期不同:
局部变量:随着方法调用而存在,随着方法调用结束而消失
成员变量:随着对象创建而存在,等待垃圾回收器空闲时回收消失,不会立即释放
4.初始化值不同:
局部变量:在使用之前必须进行初始化,否则会报错
成员变量:跟对象有关,存在系统默认初始化(String null,int 0)
匿名对象
顾名思义就是没有名字的对象
格式:
类名 对象名 = new 类名()
new 类名().成员变量 =赋值
new 类名().成员方法;
特点: 1>可以作为"参数传递" 2>实际用的过程,匿名对象不要多次,一般使用一次即可,使用完立即被回收
new 类名();
封装
private:私有的,修饰成员变量或成员方法只能本类访问(为了保证数据安全)
属性私有化
特点:
可以修饰成员变量/成员方法,只能在本类中访问,外界类不能直接访问;但是可以间接通过公共方法访问
setXXX()/getXXX()来赋值和获取值
实际开发中:只要描述一个事物的属性,全部私有
this关键字
this的含义:代表当前类对象的地址值引用
加入this 标准类的写法
JavaBean规范:
1>类是具体类 class类名{}
2>类是属性必须私有化
3>类中必须提供setXXX()/getXXX() 对成员变量的公共的访问方法(赋值/获取值)
在标准类(属性私有化,对外提供公共访问setXXX()/getXXX(),给成员变量赋值形参必须见名知已意)
局部变量和成员变量名一致,局部变量会隐藏成员变量,导致变量无法赋值,Java提供了关键字 this
提供this 区分成员变量和局部变量
this 代表当前类对象的地址值引用
this.变量名:访问的本类的成员变量名
return this 的 this 可以省略