3.29-4.5号一周小结
本周是开课的第二个星期,前面一个星期学了linux的一些命令及基本的java程序的抒写,整体上比较简单,所以也没什么好说的了。这一周,整体上比较忙碌,每天布置的作业量也比较多,难度也比较大,直到目前为止,我还没有将知识融会贯通,所以还有很大的提升空间。学习方法好像也有点不对劲,跟不上老师的进度。
那来谈谈上周的学习内容吧:
1. java语言中其中的选择、循环结构是其中最基础的内容,这部分基础一定要打牢。我的问题在于循环结构里面结合数组的运用,也就是所谓的嵌套。
基本结构:for(int i=0;i<a.length;i++){
for(int j=0;j<a[i].length;j++){
a[i][j]=…..}}
这里边的内容需要灵活运用,就像老师说的,循环结构的感觉我还没出来,所以这方面最重要的还是要多做练习,培养感觉。
2. 数组的声明和初始化。数组的声明并不只是局限于整型数组,它适用于一切对象。最主要的问题还是不能善于联想,将整型数组大范化,从而使得各中对象都适用。
基本结构:int[] a=new int[5]; /声明并初始化
Int[] a; a=new int[5];
Int[] a=new int[]{10,20,30,40};
Int[] a={10,20,30,40};
将整型的可以转化成其他的对象,比方说Person[] a=new Person[5];
3. 这周最重要的就是oop也就是所谓的面向对象的开发过程。由于以前基础不是很好,所以现在理解起来有点困难。Java开发程序其实就是一组数据及其在数据上进行的操作。所以在分析一个问题的时候,首先要将问题的对象(名词)和方法(动词)找出来,然后再一个个的分析。
基本问题:
1.方法:定义时声明的形参类型要和调用时给出的实参类型匹配,只要求实参类型可以自由转换为形参类型。
方法中返回的值要和方法声明时返回值类型匹配(如果不为void,一定要return)
方法调用的过程:栈分配临时存储空间,实参值传给形参,主方法跳到被调用方法,释放空间,回到主方法。(总结:如果传递的是基本数据,则主方法的值不变,如果是引用,则主方法的值可能改变。)
2.构造方法:方法名必须和类名完全一致。没有返回值类型。(主方法在new一个新对象的时候,就一定要调用构造方法)构造方法的作用主要是为属性赋上满足业务逻辑的初始值。
3.方法的重载:一个类中,多个方法同名不同参(参数的类型或者是顺序不同),可以通过参数类型来知道是调用那个方法。
4.继承extends:任何子类构造方法一定会调用父类构造方法,构造方法的调用和对象的生成是捆绑在一起的,那么生成子类对象一定要生成父类对象。(创建了个小孩子对象必然就创建了个人类对象)
方法的覆盖也就是实现了该父类的方法(返回值类型相同,访问控制修饰符应该比父类开放)—————父类和子类有相同的行为,但是行为方式却不同
4. 多态(oop的核心思想):子类对象可以当作父类对象来看待(Anmial a=new Bird()); 当子类对象当作父类对象来看的时候,只能访问父类中定义的属性和方法,不能访问子类中扩展的属性和方法(一个科学家把他扔在大街上,没有人知道他是谁,只知道他是个人,所以他本身的属性和方法并不为人知)
子类方法把父类方法覆盖的时候,把子类对象当作父类对象来看的话,调用的还是子类的方法(当你孩提的时候把马当作是动物,而不知道他是马,可是这个马吃的还是草,并不会因为你主观的认定而发生改变)也就是说对象的行为方式并不会因为我们把他当什么看而发生改变
当想把一个对象当作另一个对象看的时候,必须这个对象是另外一个对象的实例。所以一般要转换的时候我们都要来做个判断
If(a instanceof b){ Bird b=(Bird)a;}
5. 修饰符
static静态的,它只用来修饰类的属性和方法。
一个类中如果定义方法为静态的,就是说无须本类的对象即可调用方法。
类名.方法名即可访问。
静态变量与静态方法类似。所有此类实例共享此静态变量,也就是说在类装载时,只分配一块存储空间,所有此类的对象都可以操控此块存储空间,当然对于final则另当别论了。 相当与C中的全局变量。
final可以修饰类,属性,方法以及局部变量
修饰类,说明是最终类,不能有子类。修饰属性,说明是常量,值不能改变。
修饰方法,说明是最终方法,不能被覆盖,修饰局部变量说明是常量。
abstract修饰类和方法
某个类有抽象方法,其类也必须定为抽象类。不包含抽象方法,也可定义为抽象类。 抽象类不能实例化(不能new一个对象),所以一定要有子类,子类来实例化。和final类不相容。也有构造方法,子类构造方法来调用。
抽象类往往用来表征我们在对问题领域进行分析、 设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。
接口:特殊的抽象类
接口中的所有属性都是static final
接口中的所有方法都是抽象方法 所以可以省略abstract
接口不能实例化 也没有构造方法(跟抽象类的本质区别)
一个类只能继承自一个父类,但是能同时实现多个接口
6. Object对象的clone方法
首先要实现Cloneable 接口(里面没有任何方法)
其次clone的实现和覆盖(Animal b=(Animanl)a.clone();)
前面和main方法中要加throws CloneNotSupportedException
Clone方法实现的只是浅拷贝,意思是传递的时候是拷贝了一份地址,只是现在多了一个指向对象的地址,当改变现在对象的时候,原来的对象也被改变了。
7. 一个内存空间可以分为三个部分:栈,堆以及公共空间(静态成员、对象池)
对象池保存的是字符串型数组,也只是一个引用,一个地址。
(当看到有双引号括起来的字符串时候,都先是从对象池找有没有这样的对象,如果有,则返回这个地址,若没有,则生成新的对象为这个字符串的值,同时,在对象池里边产生这样一个指向对象的地址,同时将地址返回。)
String类型的对象的值是无法改变的。
StringBuffer(append方法,在指定对象后追加内容和String里面的+的区别是 这个不产生新的对象)
StringBuilder线程不安全,不能在多线程并发中适用,单线程中访问的时候有限考虑。
学了很多的知识点,可是在具体的程序编写中,总是不知无从下手。甚至很多时候下手了,也会产生很多的细节错误,这就是说在本质上并没有理解上课讲课的内容,只是肤浅的理解。那么怎么样才能提高,多做,多看,多思考,多总结。
既然选择了开始,就应该好好的把握,好好的去面对。很多东西是自己无法选择的,没有天赋,只能勤来补。更何况任何时候的开始都是困难的,走过了这一关就好了。
明天又是新的一周了,一定要克服本身心理及生理的弱点,以饱满热情的姿态面对每一天,每个人。相信下一周,是果实累累的一周,是成功的一周。Fighting!