学习总结

在C语言和数据结构的基础上,在上暑期的面向对象Java先修课程时,熟悉语言的速度明显加快了很多。Java和C在很多基础语法上非常相似,比如基本的数据类型,循环以及条件分支语句,数组的遍历等。但是两者在思想上是截然不同的,C是面向过程性的:一般操作步骤将问题分解为连续的小问题,然后使用函数逐步实现,数据在函数之间想换传递,坏处是数据很多时候是公有的,很多函数都有改变某个数据的能力,当一旦出现关于数据的bug的时候,难以确定是哪一个部分导致数据出错,而面向对象的Java语言的封装性则能够应对这种问题,在Java中,数据一般是类的私有类型,一般声明方式;

    private 数据类型 变量名称
//example
private double scale;

而如果要访问一个类的数据时,常常是依靠类中的方法

    public double getScale()
{
return this.scale;
//this引用类中成员变量scale;
}

要修改成员变量时则建立一个新的方法。

在利用C语言基础入门以后,开始了解Java语言中新的特性(继承、对象、类、接口)。个人认为类的概念是广义的集合,包含一些数据类型的变量以及方法,数学中集合的概念是相同性质的元素在一起的团体,所以可以将类看成具有相同成员变量和方法的对象的集合,由此引出了面向对象编程的概念。“类”是整体的抽象,而个体是实例,两者关系如同“人类”和某个具体的人。Java中使用“.”调用对象的方法。Java语言提供了丰富的库,在使用时可以依据API(应用程序接口)查询类中的方法,比如在官方关于String的总结中对于各种方法的作用以及返回值描述非常清楚。在很多过程中直接调用已经写好的方法而不用自己重写,如ArrayList类中的sort方法就是优化后的快速排序。

在类中一般会有构造器(constructor),构造器和类同名,构造器没有返回值(不同于一般的方法),在使用new调用构造器时会将实例域中初始化(需要传入参数)

第一次作业主要涉及的是使用类和对象,初步使用继承,熟悉了测试数据的使用

public class NewCharSet extends CharSet{
private int times=0;
public NewCharSet(char[] charSet){
super(charSet);
times++;
}
public int getServiceTimes()
{
this.times++;
return times;
}
}

继承是Java的三大特性之一,在编写相同性质的代码时使用继承能够避免重复代码(重复代码维护性不高,在修改的时候需要修改很多代码,容易出错)。在继承中子类能够拥有父类非private的代码,并且能有自己的属性和方法(概念类似于生物学中的继承)。

在第二次课堂上学习了Java的接口(Interface),涉及关键词interface以及implements,接口就是整合不同类型相同功能方法的工具。

public interface Geometry {
public double getVolume();
public String toString();
}

实现接口类的声明:

public class Box implements Geometry{...}

在第二次作业中将字符串集合和字符集合中相同的方法构造到了一个接口中,实际实践中发现类的种类少并且概念差别大时使用接口不一定能简化程序。

在接口使用中注意Interface中方法形式参数的类型

//接口基本功能
public void myToString(Object s);//打印字符/字符串集合
public void mySort();//对于字符/字符串进行排序
public boolean myFind(Object alpha);//判断一个字符/字符串是否在字符集合/字符串集合中
public int subSet(Object set);//判断一个字符集合/字符串集合是否是另外一个几何的子集

如果形参类型不同,则使用类Object(所有类的超类)

第三次以及第四次作业则涉及到文件操作、正则表达式的使用、HashMap以及hashcode以及Map映射。

文本读取两种方法:

  • 使用scanner读取文本中的内容
//导入对应的包
import java.util.Scanner;
import java.io.File;
//以文件路径为参数创建File类对象,在以此为参数创建Scanner的in对象
//Scanner是Java中读取键盘输入和文件的流的一个类
Scanner in = new Scanner(new File("in.txt"));
while(true)
{
//...
//hasNextLine方法判断文件是否读到末尾,是则返回false
if(in.hasNextLine==false)
break;
}
  • 使用BufferedReader
//import java.io.BufferedReader;
BufferedReader br = new BufferedReader(new File("in.txt"));
//br.readLine()方法读取文件的中的一行

在进行单词分割的时候使用正则表达式

    //将数字和字母分割出来:特别注意分割产生的空字符串
String [] wordArrTemp = readline.split("[^0-9A-Za-z]+");

将单词和频数分别存储到两个数组中是C语言中比较容易实现的算法,但是Java中有一个构造好的Map映射类<Key,Value>,在排序的时候可以根据Key或是Value进行排序

Map常用的方法:

    //map.get(Key) = value,取对应Key的Value值,如果不存在则返回null
//map.put(Key,Value),将对应的Key和Value值存入映射中

在对于映射进行遍历的时候可以使用迭代:

Iterator

1.Iterator(迭代器)可以简单理解为遍历

2.Iterator 是java中的接口,有三种方法:hasNext()迭代器中是否有下一个元素,next()返回迭代器中的下一个元素,remove()

    Iterator iterator  = list.iterator();
//iterator是一个对象,list中的iterator是关于list的一个方法
while(iterator.hasNext())
{
//list中存储的是字符串
String string = iterator.next();
//do something
}

第四次作业:最开始我使用的是String[]类来存储二元短语,但是在使用hashmap的时候发现对于两个数组,即使数组中存储的内容完全一样,但是还是作为两个不同的对象,所以不能判断内容相同的数组是相同的Key。之后重写了String数组类,重写了hashCode和equals方法,了解了Override的使用。

其他细节

入门过程中相关的资料

  1. 编程问答网站:StackOverFlow、CSDN
  2. 搜索引擎:Google
  3. 书籍:《Java核心编程卷一》

课程内容

面向对象三门课程介绍,java简介,Java基础语法,类和对象,Java特性:继承和封装,使用接口,Java编程效率(方法调用和类的使用),简单debug,计算程序运行时间,Map映射等。

教学评价

  1. 面向对象先修课程再课堂上教学的内容比较少,主要知识点是从课堂例题和课后自学得来。而网络上和各种Java学习书籍资源非常丰富,往往在短时间内无从下手,如果老师或是助教在已经学完了面向对象的基础上能够推荐一些优秀的入门书籍或是网络上的资源则对于入门新手可能会有帮助。另外在学习的过程中发现stackOverFlow是一个非常好的编程解疑网站。
  2. 在进行课后练习的时候,助教发布的GuideBook在某些细节上经常存在二义性,而二义性在编程中是应该尽量避免的,所以导致很多同学刚写完程序,新发布的文档思路又发生了改变,又需要修改或是重写。个人认为不应该在理解文档这个方面提高课程难度,课后直接发布最终版更好。

面向对象先修:Java入门的更多相关文章

  1. [Java入门笔记] 面向对象编程基础(二):方法详解

    什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...

  2. JAVA入门 面向对象

    主要内容 1.类和对象的概念 2.什么是面向对象 3.什么对象的属性方法 4.何谓对象引用 5.实例化 类和对象的概念 万物皆对象,客观存在的事物皆为对象.我们大到名胜古迹,小道生活中的一件物品,例如 ...

  3. Java入门姿势【面向对象3】构造方法及其重载_方法的调用

    上次我为大家写出啦"定义类与创建对象_了解局部变量",上篇文章代码可能较多,如没有了解透彻的话请打开下方文章在进行观看一下哦!! [Java入门姿势[面向对象2]定义类与创建对象_ ...

  4. Java入门第一章

    后天就是十一长假了,亲们准备好了去哪儿玩了吗? 今天有点空,就来聊聊Java吧,当然是一些Java入门知识了,网上有很多,这里我只是列举一些我自己学到的,感谢大家关注喵的博客这么久,也为大家带来点新知 ...

  5. 第1章Java入门体验

    第1章Java入门体验 1.java简介和平台应用 Java是sun公司开发出来,现在属于ORACLE公司java分为几个部分:首先是最基础的Java SE部分,这部分是Java的基础知识,主要包括: ...

  6. Java入门学习知识点汇总

    Java入门重要知识点在这里总结一下,以方便日后复习,这部分内容主要有:变量和常量,常用的运算符,流程控制语句,数组,方法这些内容 一.变量和常量 1.Java关键字 先贴张图: 所有关键字区分大小写 ...

  7. 学java入门到精通,不得不看的15本书

    学java入门到精通,不得不看的15本书 一.Java编程入门类1.<Java编程思想>2.<Agile Java>中文版 二.Java编程进阶类1.<重构 改善既有代码 ...

  8. JAVA入门第二季(mooc-笔记)

    相关信息 /** * @subject <学习与创业>作业1 * @author 信管1142班 201411671210 赖俊杰 * @className <JAVA入门第二季&g ...

  9. JAVA入门第一季(mooc-笔记)

    笔记相关信息 /** * @subject <学习与创业>作业1 * @author 信管1142班 201411671210 赖俊杰 * @className <JAVA入门第一季 ...

随机推荐

  1. 35. CentOS-6.3安装拼音输入法

    安装方法: su root yum install "@Chinese Support"      // 安装中文输入法 exit 装好后,在“系统-->首选项”就会看到有“ ...

  2. springboot - mybatis - 下划线与驼峰自动转换 mapUnderscoreToCamelCase

    以前都是在mybatis.xml中来配置,但是spring boot不想再用xml配置文件.网上搜寻了好久,才找到设置办法:sessionFactoryBean.getObject().getConf ...

  3. Linux&Unix命令

    Linux下: 系统操作 文件操作 防火墙 权限管理 压缩和解压 安装应用 用户管理 端口 PID 应用 start & shutdown 远程操作 异常 注意点: linux系统下内容大多用 ...

  4. jdk下载--操作系统

    不同的操作系统需要下载不同的jdk. 查看操作系统的命令: Window系统下:>winver Linux和Unix系统下: >uname -a 根据系统不同选用不同的jdk: 下载地址: ...

  5. spring cloud 服务提供者

    1. pom 依赖: <parent> <groupId>org.springframework.boot</groupId> <artifactId> ...

  6. 关于str.split(",")中间 什么时候该加\\转义

    java 分割符,对于某些符号的分割符进行切割的时候需要加转义字符,我贴上例子 1. package test1; public class split { public static void ma ...

  7. SQL语句查询年龄分段分组查询

    此情况用于数据库中没有“年龄”这个字段,只有“出生日期”这个字段.先计算出“年龄”,在分组查询. 1.SELECT *, ROUND(DATEDIFF(CURDATE(), popBirthday)/ ...

  8. AUC理解

    https://www.zhihu.com/question/39840928 机器学习和统计里面的auc怎么理解?

  9. ingress 密码验证

    traefik ingress 上面的方式需要引入haprox或者nginx,多引入了一个代理转发层,其实ingress本身就提供了basic auth的支持,在ingress规则中添加额外的认证an ...

  10. sudoers的权限被改,又忘记了root密码,又不能重启。这么做。

    报下面这个错 sudo: /etc/sudoers is world writablesudo: no valid sudoers sources found, quittingsudo: unabl ...