if.....else.....和三元运算符的区别
共同点:都是针对两种情况进行判断,都有表达式;
不同点:if....else....流程控制句,范围很大,不仅仅可以操作数据值,还可以操作输出语句去完成逻辑判断,而三元运算符仅仅是运算符,操作两个具体的数据值;
三元能实现的一定能使用if...else...流程语句
if...else...流程语句实现的,不一定能够使用三元!
(流程控制语句操作 System.out.println())
流程控制语句之Switch
选择结构之Switch 的格式
switch(变量名){
case 值1;
语句1;
break;
case值2 ;
语句2 ;
break;
...
...
...
default;
语句n;
break;
}
执行流程:switch后面的变量需要和case进行匹配,case值1:成立,执行语句1;遇到break,语句结束;如果不匹配,继续执行case值2:成立,执行语句2,break结束
switch语句后面的这个变量名可以是什么样的数据类型?
本身能够跟的基本数据类型:byte,short,char,int
jdk5以后可以是枚举(引用类型)enum
jdk7以后可以跟string类型
switch语句中的注意事项:
1)case语句的后面之间只能是常量(在java语言中:强类型语言:语法结构很严谨)
而前端JavaScript里面的switch语句的case可以是常量,变量;
2)在case语句里面,如果一旦匹配成功,一定书写break;否则会造成case穿透,case匹配成功了,就会执行里面的语句,遇见break语句结束;
3)switch中的dafult语句可以在语句的任何位置,不影响语句的执行流程正常的格式,在语句末尾,break可以省略的;如果在语句中,break带上,否则case穿透了(考点)
4)switch语句的结束条件:
第一种情况:就是语句break结束;case语句后面的break或者default语句的breank
第二种情况:就是语句默认执行到末尾结束;
循环结构语句
循环结构语句:
当需求中有这种循环的思想,就需要使用循环语句去实现;
for循环格式
for(初始化语句;条件表达式;控制体语句){
//实际开发中,此处需要去完成一些逻辑判断
循环语句体;
}
执行流程:
1)初始化语句,对变量需要赋值,
2)条件判断结果是否成立,成立,则执行循环体语句,进行控制体语句++或者--
3)继续判断条件表达式是否成立,成立,继续上面的这种操作...
''''
''''
如果控制体语句造成了条件表达式不成立,语句结束!
求和思想(求和思想和求阶乘思想是一样的)
需求:
1)在控制台上输出1-10的数据
2)求1-10之间的和
public static void main (String [] args){ //定义变量的范围从一开始小于等于10 for(int x = 1;x <=10 ; x++){ //输出变量 System.out.println(x); } int num = 0;//给最终变量定义初始值 //明确范围 for(x=1;x<=10;x++){ //输出求和 sum = sum + x; } //输出sum Stystem.out.println(sum); }
水仙花数
水仙花是一个三位数,特点就是每个位上的立方之和的结果就是当前数据本身
1)明确范围三位数,使用for 初始化语句:变量x
2)确定了范围,如何获取每个位的数据呢,个位,百位,十位?(关键)
2.1)定义三个变量 int ge,int shi ,int bai
个位数据 = 就使用x%10 ;
十位上的数据 = x /10 %10 ;
百位上的数据 = x/10 /10 %10;
2.2)完成逻辑判断
满足条件:如果x的值 == (ge*ge*ge+shi*shi*shi+bai*bai* bai)
2.3)输出这个x值,即可
统计思想
for-while的区别
while循环扩展格式
初始化语句;
while(条件表达式){
循环体语句;
控制体语句
}
执行流程:
1)初始化语句进行变量赋值,执行一次;
2)判断条件表达式是否成立,成立,执行循环体语句,依次执行控制语句;
3)再回到2)进行操作
...
...
当条件表达式不成立时,while循环结束;
区别:
1)从用法格式上看,格式不同,while循环的这个格式,不要忽略了控制体语句;
for(初始化语句;条件表达式;控制体语句){
循环体语句;
}
初始化语句;
while(条件表达式){
循环体语句;
控制体语句;
}
2)是否明确循环次数(开发中,优先使用for)
如果需求明确了循环次数,优先使用for循环,工程上的for循环使用最多的!
(最频繁的)
如果不明确循环次数,使用while循环
3)从内存角度考虑,for循环更优一些,比较节省内存空间
从for循环本身的格式上来说,for循环结束,里面的局部变量(方法定义中的变量)
就被及时的释放空间!
while循环格式,结束之后,依然能够去访问那个变量,(比较消耗内存空间)
所以相对来说whle循环没有for循环好do-while循环的格式
初始化语句;
do{
循环体语句;
控制体语句;
}while(条件表达式) ;初始化语句赋值
判断条件,成立,执行循环体,控制体语句,再次判断....特点:
和for,while最大的区别就是:即使条件不成立,循环体至少执行一次!开发中 do-while很少,一般也就是jdk提供的类的源码中会见到!
for和while死循环格式(使用while(true)居多
两种死循环格式:
for(;;){
循环体语句;
}
while(true){ //推荐这个格式
循环体语句;
}
死循环的格式最终里面完成某个逻辑,当达到某种条件结束循环会用到一个跳转控制语句 break(中断,结束) ; 不能单独用,它使用在循环语句以及switch语句中;
跳转语句
break;
break:结束,中断,不能单独使用!
一般在循环语句(loop),或者是switch语句中用,不能超过这个范围去使用; *
for循环嵌套中也可以使用break *
break 标签名称; 在多层循环嵌套的时候,标签名称就是给循环语句前面加上的标签名字(以前的早期用法)
continue;
continue 结束当前循环,立即进入下一次 循环! (不能单独用,在循环中用) *
应用:
通过JavaSE网络编程,多线程,集合,io流---网络聊天室
return; 它和Java中的方法有关系 ,引入Java中的方法(函数)的一种概念
return:是在Java中跟定义方法相关的,跟有返回值类型的方法有关 *
它结束有返回值类型的方法去使用的,一般很少单独用(可以用,不建议) * *
return实际开发中,和方法息息相关
java中方法的定义和调用
什么是Java中的方法(函数)?
固定格式:
方式1:有返回值类型的方法定义(在需求中需要根据实际场景需要返回值类型:数据类型)
权限修饰符 static 返回值类型 方法名(参数类型1 参数名称1,参数类型2 参数名称2....){
//完成的方法逻辑操作
return 结果;
} *
解释:
权限修饰符 :目前 public 公共,公开的,访问权限足够大
static: 这周面向对象中讲 (必须先加上)
返回值类型:现在数据类型(这几天:使用的基本数据类型,以后就是引用类型)
方法名:满足标识符的规则-->方法名需要满足"小驼峰命名法")
参数类型:就是数据类型(这几天:使用的基本数据类型,以后就是引用类型)
参数名称:就是形式参数(变量名)
return:关键字 :这个方法结束,带回结果,谁调用,给谁! (返回结果--->最终 后期交给前端(JavaEE技术)) *
方式1-有具体返回值的方法的调用
1)单独调用
2)输出调用
3)赋值调用 *
定义方法的注意事项:
1)方法和方法是平级关系,不能在一个方法中去定义另一个方法!
2)定义方法的时候,返回值类型需要最终和return语句的结果类型一致,否则报错!
3)有左{ 大括号的地方不能有分号,有分号的地方不能出现"{"
4)定义方法的时候,形式参数类型必须带上,
Java语言强类型语言(语法结构很严谨,不像Javascript,定义函数的时候,不需要写参数类型) *
5)调用方法的时候,实际参数要么定义要么键盘录入的,不需要在调用方法里面再去书写数据类型了
没有具体返回值类型的方法定义
前面固定写法 *
正常的格式:
public static 返回值类型 方法名(形式参数类型1 参数名1,.....){
里面直接完成了输出操作或者一些其他逻辑,
没有return关键字
System.out.println("xxxx") ;
}
方法重载
方法重载Overload:方法名相同,参数列表不同,与返回值无关,称为"方法重载"
参数列表不同:
1)参数个数不同
2)参数类型
3)或者参数类型的先后顺序
方法重载的目的:为了提供这个方法的扩展性,同一个方法可以传递不同的类型,完成具体逻辑操作;
jdk提供很多工具类都是有方法重载,Math类提供 方法abs(int/long/float/double):求绝对值
Jvm内存分配
栈,堆,方法区,本地方法区(和系统相关),寄存器(和系统相关)
数组定义以及以及创建数组进行初始化的格式
数组是一个容器,这个容器能够存储同一种类型的多个元素!
如何定义一个数组?
Java规定有一种固定的格式
数据类型[] 数组名称 ;
数据类型 数组名称[] ;
//举例:int[] arr; 定义一个int类型对数组arr变量int arr[] ;
定义一个int类型arr数组 *
创建数组---->对数组进行初始化(创建数组对象)----两种方式
1)动态初始化
2)静态初始化 * *
1)动态初始化:程序员你自己 给定数组长度,系统去默认分配的元素值
数据类型[] 数组名称 = new 数据类型[数组长度];
或者 数据类型 数组名称[] = new 数据类型[数组长度] ;
创建数组的静态初始化的格式 *
指定数组的元素,长度由系统给定
本身的格式
数据类型[] 数组名称 = new 数据类型[]{元素1,元素2,元素3...}; 推荐这个
或者
数据类型 数组名称[] = new 数据类型[]{元素1,元素2,元素3...}; *
简写格式
数据类型[] 数组名称 = {元素1,元素2,元素3...};
或者
数据类型 数组名称[] = {元素1,元素2,元素3...};
注意不能动静结合!
冒泡排序的思想:
* 两两比较,将较大的值往后放,第一次比较完毕,最大值就出现在最大索引处
* 依次这样比较,可以得到一个排好序的数组;
* 规律:
* 1)两两比较,较大的值往后放
* 2)第一次有0个不比,
* 第二次有1个不比
* 第三次有2个不比
* ...
* 比较的次数:数组长度-1次
冒泡排序
冒泡排序的思想:
两两比较,将较大的值往后放,第一次比较完毕,最大值就出现在最大索引处
依次这样比较,可以得到一个排好序的数组;
规律:
1)两两比较,较大的值往后放
2)第一次有0个不比,
第二次有1个不比
第三次有2个不比
...
比较的次数:数组长度-1次
jvm内存分配有哪些?分别作用
栈内存:
存储局部变量(在方法定义中或者方法声明上),局部变量跟方法有关的;方法进栈,方法调用完毕,里面局部变量随着调用结束而消失堆内存:
new出来的东西(引用数据类型)存储在堆中,而且它是随着对象的创建完毕,产生堆内存空间地址值!
方法区:
里面很多的区域:class字节码文件区域---存储字节码文件---jvm需要加载这个类,解析这个类所有的方法以及变量(---这个过程"反射技术")
static区域:----静态区域--存储跟static相关的一些方法以及变量等等
constant pooll:常量池 里面存储常量相关的
本地方法区(了解): 和系统相关的----->创建系统资源完成系统相关的操作
寄存器(了解): 和系统cpu都有关系:电脑的核数(16核/8核的)--核数越大,高并发场景下,运行效率越高;
面向对象的思想特点是什么?
面向对象的思想特点:
1)更符合现实生活中的思想行为习惯
2)让复杂的事情简单化
3)角色发生了改变:从执行者(面向过程)--->变成指挥者(面向对象)
面向对象的设计理念和面向对象的三大特征
面向对象的设计理念:
不断的创建对象,使用对象,指挥对象做事情!(面对对象的宗旨)
一直用的Scanner:键盘录入
Scanner sc = new Scanner(System.in) ;
//sc.nextInt() ; sc.nextLine();
sc.nextBoolean();面向对象的三大特征:封装,继承,多态(面向对象重点)
什么是类?
类:是Java语言中最基本的单元;能够描述现实世界事物的一组事物的属性和行为的集合!
类和现实世界事物是一一对应的关系;
什么是对象 ?
对象:描述现实世界的具体事物!(具体事物的具体的属性和行为)
成员变量和局部变量的区别?
1)类中书写位置不同
局部变量:方法定义中或者方法声明上
成员变量:类中,方法外
2)内存位置不同
局部变量:在栈内存中(跟方法相关)
成员变量:在堆内存中(跟对象相关)
3)生命周期不同:
局部变量:随着方法调用而存在,随着方法调用结束而消失
成员变量:随着对象的创建而存在,随着对象的创建完毕,使用完毕对象(调用方法/访问成员变量),等待GC回收(不是立即释放内存空间)
4)初始化值不同
局部变量: 要么直接定义并初始化 /要么就是先定义,使用之前初始化!(使用之前必须给初始化值,否则报错)
成员变量:存在系统默认初始化,也可以直接显示初始化(不推荐直接显示初始化)
形式参数: 基本数据类型和引用类型
基本类型:传什么类型,实际参数给对应类型的值;
重点: 引用类型 ----- 如果形式参数是具体类型----->实际参数如何传递?
匿名对象(没有名字的对象)
描述具体事物---java代码 体现
类名 对象名 = new 类名() ;
new 类名().成员变量=赋值;
new 类名().成员方法 ;
关于封装的概念
private :私有的 ,修饰的成员变量或者成员方法只能本类中访问 (为了保证数据安全)
private关键字的特点
可以修饰成员变量/成员方法,只能在当前类中访问,外界类不能直接访问;
但是,可以间接的通过公共的方法访问
this关键字
this的含义: 代表当前类对象的地址值引用
加入this---->标准类的写法 (描述学生事物/描述手机事物)JavaBean规范:
1)类是具体类 class 类名{}
2)类的属性必须私有化
3)类中必须提供setXXX()/getXXX() 对成员变量的公共的访问方法(赋值/获取值)