知识点
构造方法是在对象被创建时初始化对象的成员的方法。程序在创建对象时会自动调用默认的构造方法,如果用户定义了构造方法,会覆盖掉默认构造方法。
语法规则
1.方法名必须与类名相同
2.无返回值类型,也不能用void修饰
3.分为有参构造和无参构造
4.一个类有多个构造方法时,多个构造方法重载
默认的构造方法
1.默认的构造方法没有参数,方法体没有代码,属于“不做事”方法。
2.如果class前有修饰符,则默认的构造方法前也有相同的修饰符
3.类中只定义了有参构造方法,调用无参构造方法创建对象,编译不能通过
构造方法中调用构造方法
public Cylinder5() {
this(2.0 , 2 , "红色");
System.out.println("无参构造方法被调用了");
}
public Cylinder5(double r , int h , String c) {
System.out.println("有参构造方法被调用了");
radius = r;
height = h;
color = c;
}
1、在某一构造方法中调用另一构造方法时,必须使用this关键字来调用,否则报错
2、this()必须写在构造方法内的第一行
调用父类的构造方法
1、构造方法是不能被继承的,但是子类可以调用父类的构造方法
2.、Java程序在执行子类的构造方法之前,会先调用父类中的无参构造方法,旨在帮助继承自父类的成员做初始化操作
3、通过super(参数列表)调用父类特定的构造方法,super()必须写在子类构造方法的第一行(不能和this()存在于同一构造方法里),super()可以重载
1、构造方法是不能被继承的,但是子类可以调用父类的构造方法
2.、Java程序在执行子类的构造方法之前,会先调用父类中的无参构造方法,旨在帮助继承自父类的成员做初始化操作
3、通过super(参数列表)调用父类特定的构造方法,super()必须写在子类构造方法的第一行(不能和this()存在于同一构造方法里),super()可以重载
构造器创建对象
类的初始化&实例化顺序
先初始化再实例化:静态域--> 实例域--> 构造函数
任何子类的动作都会触发父类:父类--> 子类
同一域的顺序:创建-->赋值
对象创建过程
1、实例变量初始化
2、实例代码块初始化
3、构造函数初始化
4、引用变量指向对象
集合
ArrayList
1、容量不固定,随着容量的增加而动态扩容(阈值基本不会达到)
2、有序集合(插入的顺序==输出的顺序)
3、插入的元素可以为null
4、增删改查效率更高(相对于LinkedList来说)
5、线程不安全
基本操作
public class ArrayListTest {
public static void main(String[] agrs){
//创建ArrayList集合:
List<String> list = new ArrayList<String>();
System.out.println("ArrayList集合初始化容量:"+list.size());
//添加功能:
list.add("Hello");
list.add("world");
list.add(2,"!");
System.out.println("ArrayList当前容量:"+list.size());
//修改功能:
list.set(0,"my");
list.set(1,"name");
System.out.println("ArrayList当前内容:"+list.toString());
//获取功能:
String element = list.get(0);
System.out.println(element);
//迭代器遍历集合:(ArrayList实际的跌倒器是Itr对象)
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()){
String next = iterator.next();
System.out.println(next);
}
//for循环迭代集合:
for(String str:list){
System.out.println(str);
}
//判断功能:
boolean isEmpty = list.isEmpty();
boolean isContain = list.contains("my");
//长度功能:
int size = list.size();
//把集合转换成数组:
String[] strArray = list.toArray(new String[]{});
//删除功能:
list.remove(0);
list.remove("world");
list.clear();
System.out.println("ArrayList当前容量:"+list.size());
}
}
集合和数组
1、数组可以储存基本数据类型和对象,而集合中只能储存对象(可以以包装类形式存储基本数据类型)。
2、数组的长度是固定的,集合长度是可以改变的。
3、定义数组时必须指定数组元素类型,集合默认其中所有元素都是Object
4、集合有多种实现方式和不同的适用场合,而不像数组仅采用分配连续的空间方式
5、集合以接口和类的形式存在,具有封装,继承和多态等类的特性,通过简单的方法和属性调用即可实现各种复杂的操作,大大提高软件的开发效率。
equals() 和 ==
equals是方法,而 == 是运算符
equals()
1、equals方法不能作用于基本数据类型的变量;
2、如果没有对Object中equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址,反之比较的是内容
==
1、作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等
2、作用于引用类型的变量,则比较的是所指向的对象的地址
接口
定义
接口(Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。
语法
1、接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
2、接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
3、接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。
//接口的声明
interfaceprintable{
voidprint();
}
//接口的实现
classA6implementsprintable{
publicvoidprint() {
System.out.println("Hello, Interface");
}
类与接口的区别
接口不能用于实例化对象。
接口没有构造方法。
接口中所有的方法必须是抽象方法,Java 8 之后 接口中可以使用 default 关键字修饰的非抽象方法。
接口不能包含成员变量,除了 static 和 final 变量。
接口不是被类继承了,而是要被类实现。
接口支持多继承。
抽象类和接口的区别
\1. 抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
\2. 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
\3. 接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。
\4. 一个类只能继承一个抽象类,而一个类却可以实现多个接口。
接口的继承
一个接口能继承另一个接口,和类之间的继承方式比较相似。接口的继承使用extends关键字,子接口继承父接口的方法。
关闭窗口的方法
1.setDefaultCloseOperation(DISPOSE_ON_CLOSE);//一个窗口点右上角×,只有该窗口会关闭
2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//一个窗口点右上角×,软件的所有窗口都会关闭
3.System.exit(0)表示正常退出, JVMSystem.exit(1)表示异常退出JVM
正常退出 是指如果当前程序还有在执行的任务,则等待所有任务执行完成以后再退出;非正常退出 是只要时间到了,立刻停止程序运行,不管是否还有任务在执行。
阶段总结
阶段建议时间:一个月
实际完成时间:大约三个月
暑假学习状态:第一阶段走得最快但是考核不理想,考核两次才达标;第二阶段,进度稳定,考核理想;第三阶段,八章以后,之前的学习方法不适用了,无效学习了一段时间。尝试写游戏才找到方向。
在校学习状态:到校两星期后(10.26),重新学习Java,经过两天调整,找到游戏目标,进度稳定前进。于11月12号写完游戏(画面暂停的效果没有实现),18号考核(12号到18号之间,Java进度又慢下来,等于这段时间没学)。
Java学习心得:
从理论到实践,学习方法会有些许不同。学习理论强调的是系统性和深度,简单来说就是踏踏实实掌握所有该掌握的知识点;写游戏要拓展知识面的广度以及灵活变通,根据游戏的需要,可能要额外地基础以外的知识,把所学知识运用到游戏里,在这段时间,会面临许多未知的bug,陌生感和迷茫感如影随形,但只要不太偏离路线,坚持下来,进度会越来越快,越来越得心应手。
不管是夯基础还是写游戏,都需要去动手操作,敲代码的过程是加深理解和加强运用的过程。前八章百分之九十的代码我都敲过,暂时理解不了的知识点甚至会反复去敲,至少让脑子和肌肉记住。写游戏更需要敲代码。
积极沟通,在数据园以及学校,我完成学习任务或者不想学习了都会去组员那边转一转,问一下他们的进度或者帮忙解决问题,对于学习有没有帮助不太清楚,但是对调整心态还是很有帮助的。