-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
以下是基础的第二部分笔记(有点散乱,可能你们不大看得懂,个人笔记,都是特别基础知识,所以没有特别编辑整理,请见谅):
判断结构:
if(条件表达式){
执行语句;}
if(条件表达式){
语句1;}
else{语句2;} //相当于三元运算符,可以简化代码,但由于是元运算符,所以必须要有一个结果,但是对于这个条件表达式,所以不需要有结果
if(条件表达式){执行语句;}
else if(条件表达式){执行语句;}
.....else{语句;}
选择结构 switch(表达式){
case 取值1:语句1;break;
case 取值2:语句2;break;
.....default:语句;break;} //switch特点,语句选择类型只有byte,short,int,char。 很难判断区间。 case之间与default没有顺序,先执行第一个case,没有匹配的case执行default。结束switch有两种情况,1,遇到break,2,执行到switch结束。如果匹配的case或者default没有对应的break,那么程序会继续向下执行,运行可执行语句,直到遇到break或者switch结束。
break(跳出)应用范围:选择结构循环结构 continue(继续)应用于循环结构
注意:这两者离开应用范围无存在意义。这两个语句单独存在下面都不可以有语句,因为执行不到,标号出现可以让这两个语句作用于指定范围,continue结束本次循环,继续下次循环。
无限循环的简单表现形式:
for(;;){ } while(true){}
累加思想,计数器思想。
for(初始化表达式:循环条件表达式:循环后的操作表达式)
{执行语句:
}
注意:初始化表达式只读一次,判断循环条件,为真执行语句,再执行循环后的操作表达式,再判断循环条件,重复直到条件不满足为止。
whil和for可以互换,for为了循环而定义的变量在for循环结束后就在内存中释放,而while循环使用的变量在循环结束后还可以继续使用。所以当变量只是在循环中使用优先for循环,节约内存
while(条件表达式){执行语句:} 自动判断是否满足自动执行,(先判断,再执行)
do{语句:}while(条件); 先执行,后判读条件决定是否再执行。至少执行了一次)
语句嵌套:语句中含有语句。比如,循环嵌套。(内循环结束才再循环外循环)正方形中外循环控制行,内循环控制列) 打印五角星,尖朝上,改变条件,让条件随着外循环变化变化。尖朝下,改变初始化值)
函数:
函数是定义在类中具有特定功能的一段独立小程序。
函数格式:
修饰符 返回值类型 函数名(参数类型 形势参数1,参数类型2 形势参数2){
执行语句:
return返回值:
}
返回值类型:函数运行后产生的结果的数据类型.
参数类型:是形式参数的数据类型。
形式参数:是一个变量,用于存储调用函数时传递给函数的实际参数
实际参数:传递给形式参数的具体数值
return:用于结束函数
返回值:该值返回给调用者。
为了提高代码的复用性,对代码进行抽取,将这部分定义成独立功能,方便日后使用,java中对功能的定义通过函数来体现的,当函数运算后没有具体返回值时用特殊关键字void
有void时候,函数中可以省略return语句。
最小的功能就是函数,写代码就是将不同的功能结合。
如何定义一个函数?
1.函数是一个独立的功能。该功能的运算结果是什么?
2.定义该功能过程中是否有未知的内容参与运算。
if(x==y)
return true;
return false;//直接省略else
public static oid get(int a,int b){
System.out.println(a+b);
return;
}//这个函数定义思想有问题,因为只要满足加法功能就行了,要不要打印由调用者决定,功能单一最好。返回值类型为void的函数不能出现在System .out.println(get(a,b);
函数重载:在同一个类中,允许存在一个以上的同名函数,只有他们参数个数或者参数类型不同即可。
重载特点:与返回值类型无关,只看参数列表
重载好处:方便阅读,优化程序设计
什么时候用:当定义功能相同,但是参与运算的未知内容不同。可以使用,提高代码服复用性。
void show (inta,char b,double c){};
a,void show(int x,char y,double z){}//没有重载,和原函数一致
b.int show(int a,double c,char b){}重载,参数类型不同,注意重载和返回值类型没有关系
c,void show(int a,double x,char b){}重载,参数类型不同
d,boolean show(int c,char b(){}重载了,因为参数个数不同
e,void show(double a){}重载了,因为参数个数不同
f,double show(int a,char b,double x){}//没有,这个函数不可以和原函数出现在一个类中,虚拟机不知道执行哪个
数组:同一种类型的数据集合,其实数组就是一个容器
数组好处:可以自动给数组的元素从0开始编号,方便操作这些元素。
格式一:
元素类型[] 数组名=new 元素类型[元素个数或数组长度]
eg;int[] arr=new int[7];//int a[]=new int[5];
元素类型[] 数组名=new 元素类型[]{元素,元素,。。。}
int[] arr=new int[]{3,5,7};
int[] arr={3,5,6,7};//数据明确时用。
j内存结构:ava程序在运行时,需要在内存中的分配空间。为了提高运算效率,有对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
栈内存:用于存储局部变量,当数据使用完,所占空间会自动释放。
堆内存:
数组和对象,通过new建立的实例都存放在堆内存中。
每一个实体都有内存地址值
实体中的变量都有默认初始化值。double:0.0;float 0.0f;boolean false;
实体不被使用时,会在不确定的时间内被垃圾回收器回收。
方法区:本地方法区,寄存器。
栈:int a=5;int b=a b=8; 此时a的值不变
int[] y=new int[3]; int[] x=y x[1]=9;此时y[1]=9; //int[] y=new int[3]数组是int型,y是数组类型。new用来在内存中开辟一个存储实体。
c++中必须手动清除堆中垃圾。java不用,不定时的自动清除。
ArrayUndexOutOfBoundsException:操作数组时,访问到了数组中不存在的角标
NullPointerExc:ion:空指针异常:当引用没有任何指向值为null的情况,该引用还在用于操作实体中。
数组的操作:获取数组中的元素最为常见。通常用到遍历。
数组中有一个属性可以直接获取到数组元素的个数,length,使用方式:数组名称.length=
数组的查找:return -1;代表没有找到的情况 。 该进--折半查找(可以提高效率,但必须保证该数组是有序的。
对数组进行排序:
选择排序:内循环结束一次,最值出现在零角标位上。
冒泡排序:相邻两个元素进行比较,如果符合条件换位,第一圈,最值出现在最后位..
选择排序和冒泡排序性能低,每交换一次,堆内存中比较消耗资源,虽然有时不大,可以优化,转换到在栈中进行。但事实中不这样做,应付考试,会写。Arrays.sort(arr);真实开发使用。
发现无论什么排序,都需要对满足条件的元素进行位置置换,所以把这部分相同的代码提取出来,单独封装成一个函数。
折半查找
查表法:将所有的元素临时存储起来,建立对应关系。
每一次&15后的值作为索引去查建立好的表,就可以找对应的元素,这样比-10+‘A’简单
怎么建立这个表?
可以通过数据的形式来定义。
结果是反着的,除了使用StringBuffer,还可以使用数组完成
二维数组:
格式:int [] []arr=new int[3][2];
定义了名称为arr的二维数组,有三个一维数组,每个一维数组中有2个元素,一维数组的名称分别为arr[0],arr[1],arr[2].给第一个一维数组1角标赋值为78:arr[0][1]=78
格式2:
int[][] arr=new int[3][];
二维数组中有三个一维数组,每个一维数组的初始化值为null,可以分别对这三个一维数组分别进行初始化:
arr[0]=new int[3]; arr[1]=new int[1];arr[2]=new int[2];
int[] x,int x[];
int[][] y;int y[][];int[] y[];
int []x,y[];//x一维,y二维
a,x[0]=y;//no
b.y[0]=x;//yes
c.y[0][0]=x;//no
d,x[0][0]=y;//no
e y[0][0]=x[0]//yes
f,x=y;//no
-----------android培训、java培训、java学习型技术博客、期待与您交流!------------