20145211 《Java程序设计》第3周学习总结——绝知此事要躬行

教材学习内容总结

4.1何为面向对象

  • 面向对象,面向过程都是一种思想,没有高低之分。面向对象,就像是对冰箱操作,冰箱是一个介质,用法就像是c语言中的结构体,功能定义在对象上。面向对象,角色转变,让我们从执行者变成指挥者,面向过程是面向对象的基础。
  • 面向对象,三大特征:封装,继承,多态。开发就是找对象使用,没有对象,造一对象,找对象,建立对象,使用对象,维护对象。

4.2类与对象

  • Java可区分为基本类型和类类型两大类型系统,其中类类型也称为参考类型。类,就相当于设计,用“new”创建的对象,就是成品;每使用“new”,说明又新建了不同的对象;当用同一个方法造出的多个对象,每个对象是不同的,只是说每个对象的内容是一致的。例(定义Clothes类)

class Clothes{
    String color;
    char size;
}
public class Field{
    public static void main(String[] args){
        Clothes sun = new Clothes();
    }
}
  • sun就是一个类类型变量,类类型变量指向的是对象。
  • 类与对象的关系:要产生对象必须先定义类,类是对象的设计图,对象是类的实例。类在定义时要使用关键词class,而具体对象就是对应java在堆内存中用new建立的实体。 类是对现实生活中的描述,对象是实实在在存在的个体,对象在java中是堆内存中new创造出来的实体,描述是class定义的类,描述事物,就是描述其属性和行为,属性对应变量,行为对应函数;Car c=new Car(),c是一个类类型变量,类类型指向对象;堆内存默认初始化值Null。java指挥方式,是对象成员。
  • 在一个java文档中可以有多个类,当类只需要描述一个事物,而不需要独立运行的时候,是不用写主函数的,但是必须铭记一类一文件。

4.3标准类API

  • java.util.Scanner类:java.util.Scanner的nextInt()方法会看看标准输入中,有没有输入下一个字符串(以空格或换行分隔),有的话会尝试将之剖析为int类型,其它的nextByte()、nextShort()等作用都类似。如果直接取得上一个字符串(以空格或换行分隔),则使用next(),如果想取得用户输入的整行文字,则使用nextLine()(以空格或换行分隔),总而言之Scanner类大大简化了Java的输入。
  • java.math.BigDecimal类:Java遵守IEEE754浮点数运算规范,使用分数与指数来表示浮点数,这样就导致无法精确的进行运算,从而造成运算上的误差,比如1.0-0.8的结果就不是0.2。因此如果要求精确度,那就要小心使用浮点数,而且不能用==直接比较浮点数运算结果,所以我们可以使用BigDecimal类来得到想要的精确度。

4.4对象指定与相等性

  • 当=用于基本类型时,是将值复制给变量,==是比较两个变量储存的值是否相同;当在操作对象时,=是用来指定参考名称参考某个对象,==是用来比较两个参考名称是否参考同一对象,!=正好相反,是比较两个名称是否没参考同一对象。
  • 在基本类型中,=是将值复制给变量,而==是比较两个变量储存的值是否相同。但是,如果是在操作对象时,=是用在指定参考名称参考某个对象,而==是用在比较两个参考名称是否参考同一对象,换句话说也就是=是用在将某个名牌绑到某个对象,而==是用在比较两个名牌是否绑到同一对象。 equals是逻辑上相等,比如a.equals(b)意思就是判断a名牌绑定的对象与b名牌绑定的对象实际上内含值是否相同,因此equals()和==是不一样的。

4.5基本类型包装

  • 如果要让基本类型对象一样操作,可以使用Long、Integer、Double、Float、Boolean、Byte等类来打包基本类型。为了让Java 基本类型像对象一样操作,可以使用Long、Integer、Double、Float、Boolean、Byte等类来打包基本类型,这些类就是所谓的打包器。除了使用new创建基本类型打包器,从J2SE5.0之后提供了自动装箱功能。自动装箱与拆箱的功能事实上是编译程序蜜糖,也就是编译程序让你撰写程序时吃点甜头,编译时期根据所撰写的语法,决定是否进行装箱或拆箱动作。

4.6数组对象

  • 数组在Java中就是对象,Java会检查数组的边界,一旦越界就会抛出ArrayIndexOutOfBoundsException的错误,数组在Java中就是对象。对象的一些特点性质都可以在数组中使用。定义数组的方法,如果知道是哪些具体的数,则可以如课本P95一样,不知道具体的数可以像P98一样。在定义二维数组时,也可以仿照一维数组进行定义,总之,数组就是对象,这是数组最大的特点。
  • 在Java中可以使用System.arraycopy()的方法来进行数组值的复制,它会使用原生方式复制每个索引元素,比使用循环更快。在JDK6以上的版本中,还有个更方便的Arrays.copyOf()的方法,能够帮你建立新的数组。无论System.arraycopy()还是Arrays.copyOf(),用在类类型声明的数组时,都是执行浅层复制。

4.7字符串对象

  • 字符串本质是打包字符数组的对象,是java.lang.String类的实例。 要想比较字符串实际字符内容是否相同,不能使用==,要用equals(),这一点前面也提到了。 字符串对象一旦建立,就无法更改对象中的内容,使用+会产生新的String实例,不要将+用在重复性的连接场合。
  • 使用javac指令没有指定-encoding选项时,会使用操作系统默认编码。定义字符串使用String a.charAt(0)//显示第一个字符 a.toUpperCase()//显示字符串

5.1封装

  • 封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式,其目的主要就是隐藏对象细节,将对象当作黑箱进行操作。举个例子,找一些具有专业功能的对象,面向对象,对象不要理解为是人, 一切皆对象,我们所看到的都是对象,我们可以把现实中的事物包括脑海中的概念,都用计算机语言描述出来;写程序面向对象,把功能放进去,这就是封装。使用private对关键信息进行隐藏,设置访问数据的程度,防止用户的恶意使用。

5.2构造函数

  • 构造函数特点:首先,函数名与类名相同,其次,不用定义返回值类型,另外不可以写return语句。 构造函数作用是给对象进行初始化,多个构造函数是以重载的形式存在的。 private:权限修饰,类私有,用户无法在其他类代码中直接读取,而public则可以

5.3this关键字

  • this代表其所在函数所属对象的引用,简而言之就是this代本类对象的引用,当在函数内需要用到调用该函数的对象时,我们就可以使用this。除了被声明为 static 的地方外,this 关键字可以出现在类的任何地方;在构造函数参数与对象数据成员同名时,可用 this 区别; this()代表调用另一个构造函数,至于调用哪个构造函数,则视调用this()时给的自变量类型与个数而定(this()调用只能出现在构造函数的第一行)。

5.4static关键字

  • static用于修饰成员(成员变量和成员函数),被声明为static的成员,不会让个别对象拥有,而是属于类。
  • 在static方法中不能出现this关键字,static方法中不能用非static数据或方法成员。 import static语法是为了偷懒,但要注意名称冲突的问题。

5.5super关键字

  • super一般用在父类中,指代父类对象的参考名称。 如果定义一个新的类:A,这个A继承了类B,也就是说B是A的父类。那么如果A中 有个方法:aa();B中也有个方法: aa();那么在A 中用this.aa()调用的就是A中定义的方法,而super.aa()调用的就是A的父类B中定义的方法aa();。

5.6public与private

  • public , 可在类、对象数据成员、方法、构造函数中使用;如果成员没有声明权限修饰,那么只有在同一包的内程序代码中,才可以直接存取,也就是“包范围权限”;想在其他包的内程序代码中存取某包的类或对象成员,则该类或对象成员必须是公开成员,使用 public 以声明。
  • private用在成员变量前,这是一种保护机制,不让自己这个类以外的方法去随便使用存取这个类的数据,可以保护私有数据,只能通过调用自己类的方法去操纵这些数据。private如果用在类或方法前,程序就会报错。不过,其实也可以用在方法或构造函数声明上,私有方法或构造函数通常是类内部某个共享的演算流程,外借不用知道私有方法的存在。一般用在内部类声明中。

5.7final关键字

  • 如果对象数据成员被声明为 final ,但没有明确使用=指定值,那表示延迟对象成员值得指定,在构造函数执行流程中,一定要有对该数据成员指定值的动作,否则编译错误。

教材学习中的问题和解决过程

函数与类的内存关系

  • 主函数就是一个入口,用于调用别人,成员变量和局部变量,成员变量作用于整个类中,局部变量作用与函数中或语句中;成员变量在堆内存中,局部变量在栈内存中。区分两次不同代码的不同结果。注释掉的是第一次的代码,注释段后的是第二次的代码

     

    
    class Car
            {
            String color = "red";
                int num = 4;
                void run()
                {
                    System.out.println(color+‘ ‘+num);
                }
            }
    public class Carfac {
        public static void main(String[] args) {
          /*  Car c= new Car();
            c.color = "blue";
            c.run() ;
            Car c1=new Car() ;
            c1.run() ;*/
            new Car().num =5;
            new Car() .color ="BLUE";
            new Car() .run();
        }
    }
     

代码调试中的问题和解决过程

递归问题

  • 我个人比较喜欢用递归函数解决问题,原来做ACM 比赛题的时候有一个非常深刻的体会——递归调用几乎无所不能,除了空间的巨大消耗;因此做了第四章的课后操作题作为一种解法代表。
  • import java.util.Scanner;
    	public class Fib {
            public static void main(String[] args){
                System.out.printf("要求解费氏数的个数:");
                Scanner scanner = new Scanner(System.in);
                int n = scanner.nextInt();
                for(int i=0;i<n;i++)
                    System.out.print(fibry(i+1) + " ");
                System.out.println();
            }
            public static long fibry(int x){
                if(x==1)
                    return 0;
                else if(x==2)
                    return 1;
                else
                    return (fibry(x-1) + fibry(x-2));
            }
    	}

     


其他(感悟、思考等,可选)

有道是,“纸上得来终觉浅,绝知此事要躬行。”我在第一篇博客中写道,开始的Java对于我来说就像是才长出芽的荷花,虽然等到她芳香四溢还要经历一段时间的成长,但是我会像那只蜻蜓一直守望者,坚持着! 在不断地实践探索中,书本上的知识学习,亦或是视频上的学习,都不如自己亲手敲代码,因为亲自动手获得的感觉就是与众不同。

学习进度条

  代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时  
第一周 100/100 2/2 15/15 学会搭建Java环境,学会写一些简单程序,掌握一些小技巧 
第二周 100/200 2/4 22/37 学会使用IDEA 
第三周 150/350   1/5 24/61   深入了解面向对象
第四周      

参考资料

时间: 2024-10-13 23:58:59

20145211 《Java程序设计》第3周学习总结——绝知此事要躬行的相关文章

20145326蔡馨熠《Java程序设计》第一周学习总结

20145326蔡馨熠 <Java程序设计>第一周学习总结 教材学习内容总结 转眼间新的一学期终于开始了!为什么我这么期待呢?因为这学期可以上娄嘉鹏老师的java程序设计课,我不是什么电脑天才,之前c语言学得也不是特别好.可我就是对hdl和java特别感兴趣(之前在我的问卷调查报告里面提到过),并且寒假的时候在家里也预习了一部分java知识.第一周要求学习两个章节并作心得体会,虽然我早已看过前两章的知识,不过为了进一步巩固,我还是用了星期六一天的时间把第一章和第二章的知识从头到尾仔仔细细的看了

20155336 2016-2017-2《JAVA程序设计》第二周学习总结

20155336 2016-2017-2 <JAVA 程序设计>第二周学习总结 教材学习内容 1: GIT版本检测 2: JAVA中基本类型 整数 字节 浮点数 字符 布尔(▲) 通过API可以得知各个类型可存储的数值范围 public class Range {public static void main(String[] args){ //byte.short.int.long的范围 System.out.printf("%d~%d%n", Byte.MIN_VALU

20145201 《Java程序设计》第一周学习总结

# 20145201 <Java程序设计>第一周学习总结 ## 教材学习内容总结 万事开头难,终于开始学习了Java.寒假的时候看到老师的要求确实有点慌,但是这周翻开书,从书本知识第一行学起,发现并不是自己想想中那么难,只要一步一个脚印,每周有自己的计划,并按照计划按部就班的完成,最后一定会拥有自己的小成果的. 1.1Java不只是语言 Java经过多年的版本更新后,最新的版本是Java SE8. 在java发展的过程中,它的应用领域越来越广,根据不同级别的应用开发区分了不同的应用版本,最终j

20145224-陈颢文 《Java程序设计》第一周学习总结

20145224 <Java程序设计>第一周学习总结 教材学习内容总结 通过第一周的学习让我对Java有了个初步的了解,知道了Java分为Java SE.Java EE.Java ME三大平台,其中Java SE是基础.Java的一大特点是它可以跨平台,而JVM对Java的跨平台提供了支持,它就类似于一个虚拟机,只要在当前平台安装了相应的JVM,Java程序就有了可以在此平台上运行的基础啦.JRE是Java的执行环境,在安装了JRE的计算机上就可以运行Java的程序了,当然光是可以跑代码对于程

20155335 俞昆 2016-2017-2 《Java程序设计》第九周学习总结

学号 2016-2017-2 <Java程序设计>第九周学习总结 ##JDBC入门 在正式介绍JDBC前,已知JDBC是用来执行SQL的解决方案,开发人员使用JDBC的标准接口,开发人员不需接触底层数据库驱动程序的差异性. 本章,我们需要了解JDBC与API使用和概念,我们先要认识应用程序如何与数据库进行沟通,数据库本身是一种独立运行的应用程旭,程序员撰写的应用程序是利用通信协议对数据库进行指令交换,以进行数据的增加删除以及查找. 通常应用程序会利用一组专门与数据库进行通信协议的链接库,以简化

20145326《Java程序设计》第二周学习总结

20145326<Java程序设计>第二周学习总结 教材学习内容总结 本周学习教材第三章,本章主要讲述了java语言中的一些基础语法,java是个支持面向对象的程序语言,但在正式进入面向对象支持语法的探讨前,对于类型.变量.运算符.流程控制等,这些各种程序语言都会有的基本语法元素,还是要有一定的基础.虽然各种程序语言都有这些基本语法元素,但千万别因此而轻忽它们,因为各种程序语言都有其诞生的宗旨与演化过程,对这些基本语法元素,也就会有其独有的特性. 1. 类型 在java的世界中,并非每个东西都

20145201 《Java程序设计》第一周学习总结(修改)

# 20145201 <Java程序设计>第一周学习总结 ## 教材学习内容总结 万事开头难,终于开始学习了Java.寒假的时候看到老师的要求确实有点慌,但是这周翻开书,从书本知识第一行学起,发现并不是自己想想中那么难,只要一步一个脚印,每周有自己的计划,并按照计划按部就班的完成,最后一定会拥有自己的小成果的. 1.1Java不只是语言 Java经过多年的版本更新后,最新的版本是Java SE8. 在java发展的过程中,它的应用领域越来越广,根据不同级别的应用开发区分了不同的应用版本,最终j

20145238-荆玉茗 《Java程序设计》第一周学习总结

20145238 <Java程序设计>第一周学习总结 教材学习内容总结 Java三大平台:由于java领域的应用越来越广,根据不同级别的应用开发区分了不同的应用版本,后正式更名为Java SE,Java EE,Java ME. Java SE主要分为四个部分:JVM,JRE,JDK和JAVA语言. 了解JCP与JSR.RI.TCK的关系:JSR必须经过JCP投票通过才能成为最终的标准文件,JSR成为最终文件后对其成果做出免费且开发原始码的参考实现,称为RI,由TCK作为技术兼容测试工具箱. 了

201521123045 &lt;java程序设计&gt;第11周学习总结

201521123045 <java程序设计>第11周学习总结 1. 本周学习总结 2. 书面作业 2. 书面作业 Q1.1.互斥访问与同步访问完成题集4-4(互斥访问)与4-5(同步访问) import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.Condition; class Account{ private int balance; private Lock lock = new