流程控制语句:
1)顺序结构语句
代码从进入main方法开始,依次由上而下按照顺序执行!
2)选择结构语句
if语句:
格式1:if(表达式){
语句;
}
如果语句只有一条,大括号可以省略,但是建议不要省略掉
格式2 :if(表达式){
语句;
}else{
语句;
}
格式三:if(表达式){
语句;
}else if (表达式){
语句;
}else{
语句;
}
switch语句(面试重点):
表达式中的值和case值进行比较,如果选项1值和它一样,执行1,switch语句结束;
否则,就按照这种方式依次和case后面的值进行比较
如果上述都不匹配,就执行default语句
格式: switch(表达式){
case 选项1:语句;break;
case 选项2:语句;break;
case 选项3:语句;break;
...
default : 语句;break;
}
***** 面试题 switch后面的表达式可以是什么数据类型:
1)byte,int等基本的数据类型
2)enum(枚举类型): jdk5
3)String(jdk7)
switch语句的注意事项:
1) case后面的值只能是常量
2) 每个case语句中都有一个break,break表示结束switch语句的,遇见break,switch语句结束
那么如果不写break,会出现"case穿透"
3) switch语句的结束条件
a: 遇见break结束
b: 程序默认执行的到末尾
4)default语句可以在switch语句中的任何位置,并且不影响程序的执行;default语句如果是在语句中,
最好不要省略break, 但是如果在switch语句末尾 这个break是可以省略的!
3)循环结构语句
for循环语句
格式:for(初始化变量 ;条件表达式 ;步长语句){ / /左大括号之前不能有分号
循环体;
}
for语句执行流程:1)先初始化化变量;
2)进行条件表达式的判断,如果为 true 则进入循环体,为false则跳出循环,结束
3)条件表达式为true,进入循环体;
4)执行步长控制语句;
5)这时不用再初始化,直接进行条件表达式判断,如果为true则进入3)继续循环,
为false就跳出循环结束;
while循环语句
格式:while(条件表达式){
循环体;
步长控制语句;
}
一般使用扩展格式:
初始化变量;
while(条件表达式){
循环体;
步长控制语句;
}
***** 面试题:
关于while循环和for循环的区别?
1) 从内存角度考虑:
for循环优于while循环,循环语句结束之后,变量就会被Jvm里面GC(垃圾回收器)回收掉释放掉内存,内存空间不会消耗太多!
而while循环,是可以访问那个变量,它不会立即被回收掉!
2) 从应用场景来考虑:
如果,明确范围/次数,使用for循环 (优先考虑for循环,再考虑while)
举例:模拟登录,给3次机会,提示用户,超过3次,提示:请速联系管理员!
如果不知道循环多少次,这个时候使用while循环
举例:吃葡萄
do-while循环语句
基本格式 :do{
循环体;
步长控制语句;
}while(条件表达式);
扩展格式:初始化语句;
do{
循环体;
步长控制语句;
}while(条件表达式);
注意:先执行循环体再进行条件表达式的判断;无论如何至少都会执行一次循环体
*****面试题:
do-while循环语句和for循环,while循环语句最大的区别?
1)从格式来讲: do-while循环语句的特点:循环体至少执行一次
2)从应用场景来讲: 如果要是使用循环语句,优先考虑for循环,然后while循环,其次do-while循环
跳转控制语句:
break:表示中断,结束;
一般在循环和switch语句中使用;
continue:停止当前循环,立即进入下一次循环;
不能单独使用,必须在循环中使用;
return:返回语句,返回一个值;
一般情况:在Java中自定义一个方法中必须有return语句(前提有return语句,那么该方法必须有返回值) 携带结果性的数据
数组:是一个容器可以存储多个元素,这多个元素的数据类型必须都是同一类型
1)定义格式:数据类型 数组名 [ ];
一般使用这种格式 : 数据类型[ ] 数组名 = new 数据类型[ ]{元素1,元素2,元素3...};
//静态初始化: 指定数组中的元素的值,由系统给数组指定长度
数据类型[ ] 数组名 = new 数据类型[ 指定长度];
//动态初始化,给定指定长度,由系统给数组中的元素赋值
在以后过程中接触三个容器
数组:缺点:长度固定
StringBuffer:字符串缓冲区
集合:Collection
定义两个数组的动态初始化
三个数组的动态初始化
2) 访问数组中的元素呢?
数组名称[索引] : 索引是从0开始
索引的最大值:通过数组长度-1
直接输出数组名称:地址值
* 注意:
定义一个数组,不能动静集合
数据类型[] 数组名称 = new 数据类型[3]{元素1,元素2,元素3....} :错误的
****** 面试题:
数组中有没有length属性,String中有没有length属性,集合中有没有length属性
数组: length属性: 获取数组长度
String: 没有length属性,而是length()获取字符串的长度
集合中: 没有,但有size(): 获取集合的元素数
Java中的方法:
方法: 执行特定功能的独立的代码块!(有一个方法名)
定义方法格式:
1)有具体返回值的方法调用
修饰符 返回值 方法名(形式参数列表…){
语句;
return 表达式;
}
修饰符:public static
返回值:具体的数据类型
有具体返回值的方法调用: 赋值调用
2) 没有具体返回值的方法定义
定义格式: 举例:public static void main(String[] args){….}
修饰符 void 方法名(形式参数列表){
没有返回值;
}
没有具体返回值方法调用: 单独调用
定义方法的注意:
两个明确:
1) 明确返回值类型
2) 明确参数类型以及参数个数
定义方法的注意事项:
1) 方法和方法之间是平级关系,可以在一个方法中调用另一个方法,但是不能再该方法中定义发方法
2) 形式参数中,参数名携带数据类型,否则报错
3) 在调用方法的时候,方法名(实际参数列表) ;实际参数不需要携带数据类型
4) public staticint sum(int a,int b);{…} :这种方法是没有方法体的方法 ,不能有分号;
局部变量:在方法中或者再方法声明上的变量
成员变量:类中方法外!(面向对象中:封装)
******* 面试题:
局部变量和成员变量的区别?
1)在类中的位置不同
局部变量:在方法中或者是方法声明上!
成员变量:在类中方法外
2)在内存中的位置不同
局部变量:在栈内存中
成员变量:在堆内存中
3)生命周期:
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
成员变量:随着类的加载而存在,随着类的加载完毕,等待gC回收
4)初始化不同
局部变量:不能不初始化,即使是声明一个局部变量,使用之前必须初始化,否则报错!
成员变量:可以不用初始化值;
如果成员变量名称和局部变量名称一致的情况下,采用就近原则!
Java中的内存分配:
栈内存 : 存储是局部变量
特点: (先进后出) 进栈的方式:压栈 出栈的方式:弹栈 队列
堆内存: 里面存储的是new出来对象以及成员变量
特点: new出来的对象不会立即被Gc回收掉,而是等待GC空闲时刻回收不用对象或者没有更多引用的对象
方法区: class区域 // static区域 // 字符串常量池 // 缓冲区等等
面向对象: 本身是一个基于面向过程的一个思想,
面向过程: C语言
给定一个需求,分析--->代码实现--->加入使用方法等进行改进
一步一步的完成,面向过程!
面对对象的设计特点:
面向对象: 创建对象,使用对象,指挥对象
面对思想的特点:
1)面向对象的思想更符合我们生活中的思想行为习惯
2)让一个复杂的事情简单化
3)角色发生变化:让我们从执行者--->变成了指挥者
面对对象的特征: 封装,继承,多态
封装:将类的成员变量私有化,只能在本类访问,不能被外界访问,就需要给成员变量提供公共的成员方法;
举例:
买电脑
面向过程: 网上参考电脑的一些配置--->电脑店购买---->砍价---->安装一些软件--->购买完成
面向对象: 网上参考电脑的配置---->让懂行的电脑专家去购买---->购买回来
类: 它是用来描述现实世界中的事物!
学生事物 ----->Student类
属性 :年龄,姓名,学号,性别 成员变量:类中方法外定义的变量 age,name,sID,gender
行为 :学习,打游戏...等这些动作 成员方法:study(),playGame() ;
事物------------------->(代码)类
属性: 成员变量
行为: 成员方法
类和对象的关系:
事物--->代码 体现出 :类 ----->格式
类名 对象名 = new 类名() ;
一个标准类的定义:
1)私有化变量:
被private修饰的成员变量/成员方法,只能在本类中访问,外界不能够直接访问
2)提供有参或无参的构造方法;
(1)作用:给对象进行初始化;
(2)特点: (1)与方法名相同;
(2)构造方法可重载;
(3)当你没有自己重写构造函数时,系统会默认给你添加一个无参的构造函数;
(4 ) 没有具体的返回值,也没有返回值类型,连void也没有
(3)注意事项: (1)方法名必须与类名相同;
(2)一般用public修饰,没有返回值;
(3) 当写一个标准类的时候,没有提供无参构造方法,系统默认会提供无参构造
(4) 假设给出类有参构造,系统不会提供无参构造
(4)构造方法中不能写return语句,因为它没有返回值,也没有返回值的类型,void也没有
3)提供一些公共的可供访问成员变量的方法 例 setName() / getName()
关键字this: 代表当前对象的引用
当局部变量和成员变量名称相同时,为了防止局部变量隐藏成员变量,java就采用 this 区分
匿名对象: 没有名字对象
实际开发中,在接口中,抽象类 中用的非常多
格式 new 类名() ;
匿名对象的好处:
1)一般,调用一次即可,不适合调用多次
2)调用完毕之后,会立即从内存释放掉,及时被GC垃圾回收器回收掉!
3)匿名对象它可以作为参数进行传递
形式参数的问题:
1)形式参数如果是基本数据类型: 形式参数的改变,对实际参数没有影响!
2)形式参数是应用数据类型的话: 形式参的改变, 会直接影响实际参数
结论:
如果一个方法的形式参数是一个引用数据类型:需要创建该引用类型的具体对象