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

教材学习内容总结

认识对象

类类型

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

上面的代码中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;

}

}

    上述代码就运用了this关键词将参数值指定给了参数number
* new构造方法:用new关键字建立实例来构造。
```
class Clothes{
String color;
char size;
}
public class Field {
public static void main(String[] args) {
Clothes sun =new Clothes();
Clothes spring = new Clothes();
sun.color="red";
sun.size='S';
spring.color="green";
spring.size='M';
System.out.printf("sun(%s,%c)%n",sun.color,sun.size);
System.out.printf("spring(%s,%c)%n",spring.color,spring.size);
}
}

上述代码就是先用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;

}

}

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

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);

}

}

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

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);

}

}

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

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);

}

}

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

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);

}

}

打印结果
![](http://images2015.cnblogs.com/blog/884768/201603/884768-20160320025348021-1656213326.png) * Score2.java:把scores填充成{55,65,65,80,75,70,95,90,85,100},测试一下Arrays类的各种排序方法
修改后代码如下

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);

}

}

}



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

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);

}

}

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

    谢谢作者的分享精神,原文地址:http://www.nginx.cn/115.html location匹配命令 ~      #波浪线表示执行一个正则匹配,区分大小写~*    #表示执行一个正则匹 ...

  2. C# 文件操作(上传,下载,读取,写入)

    1. 通过byte[]数据下载文件(这种方法可用于以开放Api的形式传递文件内容) public void FileDownLoadByByte(byte[] fileData, string fil ...

  3. oracle中的数值函数整理

    主要分为三块介绍(单值函数.聚合函数.列表函数) 一.单值函数(比较简单,看一遍基本也就理解记住了) 1.基本加减乘车没有什么可说的,只需要注意一点,任何值与null一起运算 ,结果都为null,因为 ...

  4. jQuery form插件的使用--处理server返回的JSON, XML,HTML数据

    详细代码: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> & ...

  5. Android 滑动效果入门篇(一)—— ViewFlipper

    ViewFilpper 是Android官方提供的一个View容器类,继承于ViewAnimator类,用于实现页面切换,也可以设定时间间隔,让它自动播放.又ViewAnimator继承至于Frame ...

  6. 动手学习TCP: 环境搭建

    前一段时间通过Wireshark抓包,定位了一个客户端和服务器之间数据传输的问题.最近就抽空看了看<TCP/IP详解 卷1>中关于TCP的部分,书中用了很多例子展示了TCP/IP协议中的一 ...

  7. [转]AngularJs 多语言的使用 angular-translate

    本文转自:http://www.tuicool.com/articles/zeymimB 随着世界各地Web访问量的增加,作为开发者的我们也在不断让应用国际化.本地化.当用户访问我们的应用时,他应该能 ...

  8. MIT jos 6.828 Fall 2014 训练记录(lab 6)

    源代码参见我的github: https://github.com/YaoZengzeng/jos 在这个实验中将实现一个基于Intel 82540M(又称E1000)的网卡驱动.不过,一个网卡驱动还 ...

  9. selenium循环点击文本框

    1.可以用xpath循环点击checkbox List<WebElement> list = dr.findElements(By.className("datagrid-row ...

  10. NP完全问题 NP-Completeness

    原创翻译加学习笔记,方便国人学习算法知识! 原文链接http://www.geeksforgeeks.org/np-completeness-set-1/ 我们已经找到很多很高效的算法来解决很难得问题 ...