public static void main(String[] args) {
int[] arr={4,6,2,3,6,5};
bubbleSort(arr);
System.out.println(Arrays.toString(arr));
}
public static void bubbleSort(int[] arr){
for(int i=0;iarr[j+1]){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
二.杨辉三角
public static void main(String[] args) {
int[][] arr=new int[10][10];
arr[0][0]=1;//第一行就一个元素,固定为1
//构造杨辉三角
for(int i=1;i<10; i++){ //从第2行到第10行的遍历
for(int j=0;j<=i; j++){ //这是对列的遍历,从第1列到与行数相等的列. 也就是第2行就遍历到第2列,第3行遍历到第3列...
if(j==0 || j==i){ //每一行的第一个元素和最后一个元素都固定为1
arr[i][j]=1;
}else{ //每一行除了第一个元素和第二个元素都等于上一行的本列元素加上上一行的前一列元素
arr[i][j]=arr[i-1][j]+arr[i-1][j-1];
}
}
}
//输出杨辉三角
for(int i=0;i<10;i++){
for(int j=0; j<=i;j++){
System.out.print(arr[i][j]+"t");
}
System.out.println();
}
}
上面两个是对数组的一个练习,也算是有一点点编程逻辑了,下面就开始进入面向对象的学习了.
三.面向对象1.成员变量可以不初始化,因为成员变量在类加载过程中,jvm会初始化默认值,而局部变量在使用前必须初始化.
2.Java中一共有两种类型的数据: (1) 基本数据类型 (2)引用数据类型
基本数据类型存放的是具体的值,而引用数据类型存放的是某一个对象的地址(数组,字符串也是引用数据类型).
3.方法的重载: 同一个类中,方法名相同,形参列表不同(参数类型或者参数个数不同), 返回类型和修饰符无要求
注意:父类和子类之间不是重载,因为必须是一个类中,而子类继承父类的实质其实是执行的父类的方法,不是在一个类中.
4.可变参数
用法:参数类型.. 参数名
注意: (1)可变参数的实参可以是数组
(2) 可变参数可以和普通类型的参数一起使用,但是可变参数必须放在最后.
这里面有一个细节,上代码:
public class Test {
public static void main(String[] args) {
Student student=new Student();
student.eat(1); //重载, 调用的是哪个方法呢?
}
}
class Student {
public void eat(int... a){
System.out.println("AAA");
}
public void eat(int a){
System.out.println("BBB");
}
}
输出结果是: BBB
也就是当存在上述情况的方法重载时,调用的是没有使用可变参数的方法.
5.作用域: java中有局部变量 和 成员变量, 成员变量作用域在整个类体,而局部变量作用域只在定义变量的方法体中生效.
成员变量还分为类变量和实例变量,.方法也分为两种:(1) 没有static修饰的方法(2)有static修饰的方法. 类变量的作用域是整个类体, 而 实例变量只能在没有static修饰的方法中使用,或者通过对象实例来使用.
注意: 成员变量和局部变量可以重名,但是遵循就近原则. 代码举例:
public class Test03 {
public static void main(String[] args) {
Student student=new Student();
student.test();
}
}
class Student {
int age=10; //成员变量, 值为10
public void test(){
int age=20; //局部变量 值为20
System.out.println(age); //输出为 20
}
}
6.构造方法/构造器
- 构造器的修饰符可以默认, 也可以是 public protected private
- 构造器没有返回值
- 方法名 和类名字必须一样
- 参数列表 和 成员方法一样的规则
- 构造器的调用, 由系统完成 (new的时候就会调用构造方法)
使用细节: (1) 一个类可以定义多个构造器 (构造方法的重载)
(2) 如果不写构造器,系统会默认定义一个无参的构造器
(3) 如果自己定义了构造器,则系统不再提供默认构造器
(4) 构造器是初始化对象,不是创建对象.
7.this关键字
(1)this 关键字可以用来访问本类的属性、方法、构造器 (2)this 用于区分当前类的属性和局部变量 (3)访问成员方法的语法:this.方法名(参数列表); (4)访问构造器语法:this(参数列表); 注意只能在构造器中使用(即只能在构造器中访问另外一个构造器, 必须放在第一 条语句 (5)this 不能在类定义的外部使用,只能在类定义的方法中使用。8.访问修饰符
(1)修饰符可以用来修饰类中的成员变量,方法,以及类
(2)只有默认的和public才能修饰类,当类为默认的修饰符时,它不能被不同包的类使用,
9.面向对象的三大特性:
(1)封装
封装就是隐藏内部实现的细节,只暴露出调用的接口。
好处:可以保护数据安全,可以降低代码的耦合度,
(2)继承
(1)子类继承了所有的属性和方法,非私有的属性和方法可以在子类直接访问, 但是私有属性和方法不能在子类直接访问,要通过父类提供公共的方法去访问 (2)子类必须调用父类的构造器, 完成父类的初始化 (3) 当创建子类对象时,不管使用子类的哪个构造器,默认情况下总会去调用父类的无参构造器,如果父类没有提供无 参构造器,则必须在子类的构造器中用 super 去指定使用父类的哪个构造器完成对父类的初始化工作,否则编译不会通过 (4)如果希望指定去调用父类的某个构造器,则显式的调用一下 : super(参数列表) (5) super 在使用时,必须放在构造器第一行(super 只能在构造器中使用) (6) super() 和 this() 都只能放在构造器第一行,因此这两个方法不能共存在一个构造器 (7) java 所有类都是 Object 类的子类, Object 是所有类的基类. (8) 父类构造器的调用不限于直接父类!将一直往上追溯直到 Object 类(顶级父类) (9) 子类最多只能继承一个父类(指直接继承),即 java 中是单继承机制。 思考:如何让 A 类继承 B 类和 C 类? 【A 继承 B, B 继承 C】 (10) 不能滥用继承,子类和父类之间必须满足 is-a 的逻辑关系方法重写:子类有一个方法和父类的某个方法名称、返回类型、参数一样时,就是子类对父类方法的重写. (返回类型可以为父类那个方法返回类型的子类,)
注意:重写时子类要重写的方法的访问权限不能低于父类方法的访问权限 (访问权限public最大)
重写与重载的区别:
(3)多态
多态的理解:多态就是一个对象的不同表现形式,比如一个类被多个子类继承,并且重写了他的方法,那么他的方法就可以拥有不同的实现.
实现多态的三个必要条件:
(1) 要存在继承
(2)子类要重写父类的方法
(3)父类引用指向子类对象 (向上转型)
多态的好处:灵活性,可扩充性,相处类型之间的耦合关系
总结: 今天的收获还是蛮多的,有很多细节之前都忘了,现在重新学习一遍,醍醐灌顶的感觉,今天就学到这里吧,明天有个课要答辩,赶紧调试一下代码去.


