do while循环
初始化语句:
do{
循环体语句;
步长语句;
}while(条件表达式);
跳转控制语句:
(1)break;
break:中断结束单层循环;中断多层循环;
(2)continue:
continue:继续(结束当前循环,立即进入下一次循环)
单独使用:没有意义,continue在loop外部(循环中使用)
(3)return:
return:一般很少单独使用,在结束方法时使用
return是结合方法去使用的,如果一个方法中有return,具体返回结果;
数组
数组是一种可以存储同一种类型元素的容器
数据类型[] 数组名称;
数据类型 数组名称[];
动态初始化的格式:
数据类型[] 数组名称 = new 数据类型[数组长度] ;
静态初始化的格式:
数据类型[] 数组名称 = new 数据类型[]{元素1,元素2,元素3……};
数据类型[] 数组名称={元素1,元素2,元素3……}
访问数组 中的元素内容:
数组名称[数组的角标(从0开始编号)]
数组有一个特定的属性:length
String:没有length属性,length()
集合中:没有length属性,size()
冒泡排序的思想:
两两比较,第一次比较完毕之后,最大出现在最大索引处,依次这样,可以得到一个排序的数组,两两比较,大的往后方法,比较的次数:数组长度-1次
排序代码
for(int x = 0 ; x < arr.length-1 ; x ++){
for(int y = 0 ; y < arr.length-1-x ; y++){
if(arr[y] > arr[y+1]){
int temp = arr[y] ;
arr[y] = arr[y+1] ;
arr[y+1] = temp ;
}
}
}
1.二维数组的概念:
元素是一个一维数组
2.有几种格式
格式1:
数据类型[][] 数组名称 = new 数据类型[m][n] ;
m:表示一维数组的个数
n:表示每一个一维数组中的长度
格式2:需要动态给定一维数组的长度.
数据类型[][] 数组名称 = new 数据类型[m][] ;
格式3:静态初始化
数据类型[][] 数组名称= new 数类型[][]{{元素1,元素2,,,},{元素1,元素2,3..},{...}};
简写格式:
数据类型[][] 数组名称 = {{元素1,元素2,,,},{元素1,元素2,3..},{...}} ;
3.二维数组的遍历(掌握)
int[][] arr = {{1,2,3},{4,5},{6}};
面向对象
思想特点:
1)更符合生活中的思想行为习惯
2)让复杂的事情简单化
3)角色发生变化(执行者--->指挥者)
设计原则:
不断地创建对象,使用对象,指挥对象做事情!
面向对象的三个特征
封装,继承和多态!
成员变量和局部变量区别
1)在类中的位置不同
局部变量:是在方法定义中或者方法声明上
成员变量:是在类中,方法外
2)在内存中的位置不同
局部变量:在栈内存中
成员变量:在堆内存中
3)生命周期不同:
局部变量:随着方法调用而存在,随着方法调用完毕消失
成员变量:随着对象的创建而存在,随着对象的使用完毕,等待GC垃圾回收器回收掉,变量才消失.
4)初始化时机不同:
局部变量:在使用之前必须对变量初始化,否则出现错误."可能尚未初始化变量"
成员变量:可以不初始化,跟对象有关系,加载进堆内存中,系统会根据它的类型来进行默认初始化!
Java内存分配
栈内存:方法加载进栈(里面存储局部变量)
堆内存:new出来的东西 new 类名() ; (成员变量)
方法区:存储一些字节码文件对象(xxx.class),static相关的,字符串常量池等等...
(Java代码经历三个阶段:Source(源码),CLASS阶段(反射完成的),
RUNTIME阶段(运行阶段) 反射中讲关于java经历的三个阶段)
本地方法区:和系统相关
寄存器:和cpu有关系
形式参数如果是基本数据类型,形式参数的改变对实际参数没有影响
形式参数如果是引用类型,数组,类(具体类),形式参数的改变会直接影响实际参数!
传递如果是数组----->实际参数 需要传递---创建该数组对象
传递的如果是类:具体类----->实际参数 需要传递该类的具体对象
封装:(保证的数据的安全性!)
将一个类的中的(属性)成员变量私有化,然后对外提供公共的访问方法;
setXXX(形式参数)getXXX()方法(给成员变量赋值和获取值)
this:代表当前类的对象的地址值引用, 局部变量和成员变量出现了冲突(局部变量隐藏了成员变量)
this.成员变量;
this.成员方法();
this() ; 访问本类的无参构造方法
this("..");访问本类的有参构造方法(根据参数类型)
private的特点:
1)private可以修饰一个类中的成员变量,也可以成员方法
2)被private修饰的成员变量或者是成员方法只能在本类中方法,外界不能访问的!(保证数据的安全性)
构造方法
1)方法名和类名相同
2)没有具体的返回值类型
3)并且连void都没有
格式:
权限修饰符 类名就是方法名(){ //无参/有参构造方法
}
作用:对数据进行初始化(修改默认初始化的内容)
关于静态static的特点:
1)被static修饰的变量/方法都随着类的加载而加载
class xxx{} ----> 通过javac 编译xxx.java文件 --->编译没有问题(Java语法校验)---->产生xxx.class文件
2)被static修饰的 优先于对象存在
回想main :被静态修饰符: jvm调用它
public static void main(String[] args){
}
3)被static修饰的可以被多个对象共用
有共享,共用
举例:
班级的编号(同一个班级的都在共用编号)
水杯(不能被共用)
也在告诉我们,什么时候将变量定义静态变量!
4)被静态修饰的成员变量或者成员方法 ,
可以被类名直接访问(推荐访问方式)
类名.成员方法;
类名.成员方法();
但是,也可以用该类对象来访问该成员(不推荐的!)
使用static关键字的注意事项:
1)在static中,是没有this关键字的! (this:代表当前类的对象的地址值,对象已经创建了而static修饰的和类有关系);
2)关于成员方法的访问问题:
非静态的成员方法
既可以访问静态的成员变量,也可以访问非静态的成员变量
既可以访问静态的成员方法,也可以访问非静态的成员方法;
静态的成员方法
简单记:静态只能访问静态