20145208 《Java程序设计》第3周学习总结

教材学习内容总结

认识对象

类类型

  • 在第三章的学习中,我了解到JAVA可区分为基本类型和类类型两种类型,在上周的学习中我学习了JAVA的基本类型,在这周学习的就是类类型,这周的学习相对于前两周来说要困难一些,而且所学的知识比较多。
  1. class Clothes{
  2. String color;
  3. char size;
  4. }
  5. public class Field{
  6. public static void main(String[] args){
  7. Clothes sun = new Clothes();
  8. Clothes spring = new Clothes();
  9. }
  10. }

上面的代码中sun和是spring就是类类型变量,类类型指向的就是对象。

类与对象

  • 在本章学习的开始,我最先了解到的是关于类与对象的知识,例子还是上面的代码,代码中的 Clothes sun=new Clothes(),其中的sun和Spring就是引用的类类型变量,new Clothes就是在生成的对象,而且sun也可以近似的看成是指针。

  • 在学习本周内容的初期,我还是不太熟悉类类型的注意事项,比如尽管是在两个JAVA文件中,但在同一个scr文件夹中也不可以有相同的类名,就比如书中的Clothes类,前后出现了多次,但不可以都命名为Clothes,必须有所区别。就像图中那样:

  • 不同的构造方法决定了生成对象的方式

    • this构造方法:this代表其所在函数所属对象的引用,this代本类对象的引用,当在函数内需要用到调用该函数的对象时,我们就可以使用this。而 this()代表了调用另外一个构造函数。

public class CashCard {

String number;

int balance;

int bonus;

CashCard(String number,int balance,int bonus){

this.number=number;

this.balance=balance;

this.bonus=bonus;

}

}

  1. 上述代码就运用了this关键词将参数值指定给了参数number
  2. * new构造方法:用new关键字建立实例来构造。
  3. ```
  4. class Clothes{
  5. String color;
  6. char size;
  7. }
  8. public class Field {
  9. public static void main(String[] args) {
  10. Clothes sun =new Clothes();
  11. Clothes spring = new Clothes();
  12. sun.color="red";
  13. sun.size='S';
  14. spring.color="green";
  15. spring.size='M';
  16. System.out.printf("sun(%s,%c)%n",sun.color,sun.size);
  17. System.out.printf("spring(%s,%c)%n",spring.color,spring.size);
  18. }
  19. }

上述代码就是先用class定义了类,然后用new建立实例。

  • 封装=类+访问控制(public,protected,private...)

    • 我觉得封装是一种对信息的隐藏,用关键字private等来控制用户对类的修改和访问。

public class CashCard2 {

private String number;

private int balance;

private int bonus;

CashCard2(String number, int balance, int bonus) {

this.number = number;

this.balance = balance;

this.bonus = bonus;

}

void store(int money) {

if (money > 0) {

this.balance += money;

if (money >= 1000) {

this.bonus++;

}

} else {

System.out.println("储值是负的?你是乱来的么?");

}

}

int getBalance(){

return balance;

}

int getBonus(){

return bonus;

}

String getNumber(){

return number;

}

}

  1. 上述代码便使用了private对参数进行了封装来限制用户对参数的更改。
  2. ####标准类
  3. * java.util.Scannerjava.math.BigDecimal两个基本标准类
  4. * java.util.ScannernextInt()方法会看标准输入中,有没有输入下一个字符串,有的话会尝试将之剖析为int类型。Scanner对每个基本类型都有对应的方法。
  5. * 使用java.math.BigDecimal可以得到更好的精度。而且用BigDecimal比较相等时,可以直接利用调用add(),再调用equals()比较两个BigDecimal实质上是否相同。
  6. ####对象相等
  7. * ==与equals的区别
  8. * ==比较的是对象之间的地址
  9. * equals比较的是逻辑上的相等与否
  10. ###基本类型打包
  11. * int-Integerlong-Longbyte-Bytefloat-Floatdouble-Doubleboolean-Boolean
  12. ###数组对象
  13. * 数组在JAVA中的存在形式就是对象,JAVA会检查数组的边界,越界就会触发ArrayIndexOutOfBoundsException的错误,所以和在C语言中不同,JAVA中的数组的长度在建立的时候就确定了。
  14. * System.arraycopy()与Arrays.copyof()用在类类型声明的数组时,都是执行浅层复制。System.arraycopy()复制的方法是进行数组值的复制,Arrays.copyOf()复制的方法,是建立新的数组。
  15. * 思考题:深拷贝和浅拷贝
  16. * 浅拷贝:只复制一个对象。举例如下
  17. *

class Clothes3{

String color;

char size;

Clothes3(String color,char size){

this.color=color;

this.size=size;

}

}

public class ShallowCopy {

public static void main(String[] args) {

Clothes3[] c1={new Clothes3("red",'L'),new Clothes3("blue",'M')};

Clothes3[] c2=new Clothes3[c1.length];

for (int i=0;i<c1.length;i++){

c2[i]=c1[i];

}

c1[0].color="yellow";

System.out.println(c2[0].color);

}

}

  1. * 深拷贝:对对象内部的引用均复制。
  2. *

class Clothes4{

String color;

char size;

Clothes4(String color,char size){

this.color=color;

this.size=size;

}

}

public class DeepCopy {

public static void main(String[] args) {

Clothes4[]c1={new Clothes4("red",'L'),new Clothes4("blue",'M')};

Clothes4[]c2=new Clothes4[c1.length];

for (int i=0;i<c1.length;i++){

Clothes4 c=new Clothes4(c1[i].color,c1[i].size);

c2[i]=c;

}

c1[0].color="yellow";

System.out.println(c2[0].color);

}

}

  1. ###字符串对象
  2. * 字符串本质是打包字符数组的对象。
  3. * 要想比较字符串实际字符内容是否相同,不能使用==,要用equals()。
  4. * "" 写下的字符串称为字符串常量,使用 + 连接字符串会产生新的String实例。
  5. * 可以使用length()取得字符串长度,使用charAt()指定取得字符串中某个字符,使用toUppercase()将原本小写的字符串内容转为大写。
  6. ###查询JAVA API文件
  7. * Windows系统下,首先要下载CHM格式的Java API。然后参照老师的博客学习。
  8. ## 教材学习中的问题和解决过程
  9. 在编写代码的时候出现了一个没有解决的问题。

public class Average {

public static void main(String[] args) {

long sum = 0;

for (String arg:args){

sum +=Long.parseLong(arg);

}

System.out.println("平均:"+(float)sum/args.length);

}

}

  1. 上述代码的运行结果是![](http://images2015.cnblogs.com/blog/884768/201603/884768-20160320022240974-2007046605.png)
  2. 结果是NAN,这不是我想得到的,在网上查到NAN代表not a number,是因为程序中没有给定参数值的原因,但是我想按照书上的方法对其赋予参数变量,却提示无法找到相应的类,这个问题我研究了一会还是没有解决。
  3. ![](http://images2015.cnblogs.com/blog/884768/201603/884768-20160320022746037-1007013052.png)
  4. * p88 DecimalDemo.java:修改代码,测试学习效果,比如打印两个整数的乘积
  5. 修改后代码如下

import java.math.BigDecimal;

public class DecimalDemo {

public static void main(String[] args) {

BigDecimal operand1=new BigDecimal("1.0");

BigDecimal operand2=new BigDecimal("0.8");

BigDecimal result=operand1.multiply(operand2);

System.out.println(result);

}

}

  1. 打印结果
  2. ![](http://images2015.cnblogs.com/blog/884768/201603/884768-20160320025348021-1656213326.png)
  3. * Score2.java:把scores填充成{556565807570959085100},测试一下Arrays类的各种排序方法
  4. 修改后代码如下

import java.util.Arrays;

public class Score2 {

public static void main(String[] args) {

int[]scores={55,65,65,80,75,70,95,90,85,100};

for (int score:scores){

System.out.printf("%2d ",score);

}

System.out.println();

Arrays.fill(scores,60);

for (int score:scores){

System.out.printf("%3d",score);

}

}

}

  1. 结果如图
  2. ![](http://images2015.cnblogs.com/blog/884768/201603/884768-20160320030034599-1978131954.png)
  3. * p108 Sum.java:输入11.1试试,会是什么效果?如果有问题怎么解决?
  4. 输入了11.1之后出现了错误如图
  5. ![](http://images2015.cnblogs.com/blog/884768/201603/884768-20160320030705303-1708131779.png)
  6. 阅读之后发现是因为参数定义的是整型,所以只需要修改为浮点数就可以了,代码如下:

import java.util.Scanner;

public class Sum {

public static void main(String[] args) {

Scanner scanner=new Scanner(System.in);

float sum=0;

float number=0;

do {

System.out.print("输入数字:");

number=Float.parseFloat(scanner.nextLine());

sum+=number;

}while (number!=0);

System.out.println("总和:"+sum);

}

}

  1. 结果如图,果然可以了:
  2. ![](http://images2015.cnblogs.com/blog/884768/201603/884768-20160320030831349-644664789.png)
  3. * p85 Field2.java: 构造方法的使用,构造方法决定了生成对象的方式
  4. 按照教学指导上面说的加了一行加一行``Clothes2 autumn = new Clothes2();``发现不能运行;
  5. ![](http://images2015.cnblogs.com/blog/884768/201603/884768-20160320024237599-2130983867.png)
  6. 原因是实际参数列表和形式参数列表的长度不同,就是新加的一行与形式参数长度存在差异。
  7. ## 代码调试中的问题和解决过程
  8. 在代码编译中我遇到了GBK码的一些问题,一些包含汉字的文件我在IDEA是可以正常的运行,但是在cmd上运行就会出现错误,下面是任务日志的内容:
  9. ![](http://images2015.cnblogs.com/blog/884768/201603/884768-20160320022959990-1161601132.png)
  10. 然后我通过上网查找相应的解决方案,发现应该是文件编码方式的问题,只要改成如下方式就可以正常编译运行了:
  11. ![](http://images2015.cnblogs.com/blog/884768/201603/884768-20160320023201209-1973195142.png)
  12. ## 其他(感悟、思考等)
  13. * 在本周的学习中,我感受到了JAVA学习的压力,但是也感受到了JAVA学习的一些乐趣,这一周学习的内容有一些我还是理解的不够,很多地方不是很熟练,也有一些地方知其然不知其所以然,所以我觉得我需要加强学习的深度,在以后的学习中知其然更要知其所以然,在JAVA的基础学习上掌握一个扎实的基础,我相信对我以后的JAVA学习乃至于其他编程语言的学习都有很大的好处,说实话,我觉得JAVA的这种翻转课堂的学习方式,让我在这一学期的前三周就获益匪浅,让我觉得我在一学期的学习之后肯定可以有一个自己的惊讶的飞跃。
  14. * 所谓付出的越多得到的就越多,我觉得这三周我为JAVA付出的时间和收获真的是这样的,代码写的越多,我对JAVA学习的认识也越多了。这种学习方式对我来说真的是新颖而又有效的,我也想着将这样的方法拓展到其他的科目中。
  15. ## 学习进度条
  16. | | 代码行数(新增/累积)| 博客量(新增/累积)|学习时间(新增/累积)|重要成长|
  17. | -------- | :----------------:|:----------------:|:---------------: |:-----:|
  18. | 目标 | 5000 | 30 | 400小时 |成为超过高级初学者的存在 |
  19. | 第一周 | 150/150 | 1/3 | 15/15 |第一个JAVA程序 |
  20. | 第二周 | 150/300 | 2/5 | 20/35 | 第一次对教材代码进行自己的修改 |
  21. | 第三周 | 400/700 | 2/7 | 20/50 | 可以熟练地进行代码托管 |
  22. ## 参考资料
  23. - [Java学习笔记(第8版)](http://book.douban.com/subject/26371167/)
  24. - [《Java学习笔记(第8版)》学习指导](http://www.cnblogs.com/rocedu/p/5182332.html)
  25. - [ 我的git代码托管 ](http://git.oschina.net/20145208/java-besti-is-2015-2016-2-20145208/tree/master)
  26. - 代码托管截图如下:
  27. ![](http://images2015.cnblogs.com/blog/884768/201603/884768-20160322134425354-914805904.png)
  28. ![](http://images2015.cnblogs.com/blog/884768/201603/884768-20160322134439792-1256094683.png)
  29. ![](http://images2015.cnblogs.com/blog/884768/201603/884768-20160322134448776-705750155.png)

20145208《Java程序设计》第3周学习总结的更多相关文章

  1. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  2. 20145213《Java程序设计》第二周学习总结

    20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...

  3. 20145213《Java程序设计》第一周学习总结

    20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...

  4. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  5. 20145330孙文馨 《Java程序设计》第一周学习总结

    20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...

  6. 20145337 《Java程序设计》第九周学习总结

    20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...

  7. 20145337 《Java程序设计》第二周学习总结

    20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...

  8. 20145218《Java程序设计》第一周学习总结

    20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...

  9. 《Java程序设计》第九周学习总结

    20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...

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

    20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...

随机推荐

  1. node.js之看懂package.json依赖库版本控制

    金天:学习一个新东西,就要持有拥抱的心态,如果固守在自己先前的概念体系,就会有举步维艰的感觉.node.js依赖库的版本控制 一般node.js项目会依赖大量第三方module, 那么如何控制modu ...

  2. OracleGateway11gR2访问异构数据库(MSSQL)配置文档(转)

    1.前提条件 1. 准备工作 软件名称 操作系统 IP地址 端口 用户 密码 版本 状态 Oracle数据库 Windows localhost 1521 scott scott win32 Orac ...

  3. 从源码分析 Spring 基于注解的事务

    在spring引入基于注解的事务(@Transactional)之前,我们一般都是如下这样进行拦截事务的配置: <!-- 拦截器方式配置事务 --> <tx:advice id=&q ...

  4. [测试] 试用Hadoop 2.2中的HDFS NFS

    Hadoop 2.2中正式启用了hdfs nfs功能,使得hdfs的通用性迈进了一大步.在公司让小朋友搭建了一下,然后我自己进行了一点简单的试验,有一点收获,记录在此. 理论 使用hdfs nfs功能 ...

  5. hadoop yarn configure

    <property>  <description>The minimum allocation for every container request at the RM,  ...

  6. matlab生成HEX文件-任意信号 大于64K长度

    HEX文件格式不赘述,写里直接放上代码.请批评改正. %%convert a signal data into hex file format % data format:16bit % signal ...

  7. 使用LVS实现负载平衡之Windows Server 2008配置

    LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一.承载于 II ...

  8. 最小生成树 2429: [HAOI2006]聪明的猴子

    BZOJ 2429: [HAOI2006]聪明的猴子 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 877  Solved: 566[Submit][ ...

  9. python中list注意事项

    今天写python出了一个小插曲,具体情况见代码: >>> a = [1,2,3] >>> import queue >>> q = queue. ...

  10. HTML设置超链接字体颜色和点击后的字体颜色

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...