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. Erlang 进程被抢占的条件——一个进程长时霸占调度器的极端示例

    最近研究 binary 的实现和各种操作对应的 beam 虚拟机汇编指令,发现有一些指令序列是不可重入的,比如说有的指令构造一个上下文(也就是某种全局状态),然后下一条指令会对这个上下文做操作(具体的 ...

  2. TCP 连接的 TIME_WAIT 过多 导致 Tomcat 假死

    最近系统二次开发之后,发现使用的 Tomcat 7 会经常假死.前端点击页面无任何反应,打开firebug,很多链接一直在等待服务器的反应.查看服务器的状态,CPU占用很少,最多不超过10%,一般只有 ...

  3. andriod增、删、改、查

    将数据库的增删改查单独放进一个包 */ package com.itheima28.sqlitedemo.dao; import java.util.ArrayList; import java.ut ...

  4. 湖南师范大学第五届大学生计算机程序设计竞赛--G--修路

    题目链接:http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=11464&courseid=132 题目: ...

  5. hdu 2874 Connections between cities [LCA] (lca->rmq)

    Connections between cities Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (J ...

  6. scons使用

    1.概述 scons是一个Python写的自动化构建工具,和GNU make相比优点明显:    A.移植性:python能运行的地方,就能运行scons    B. 扩展性:理论上scons只是提供 ...

  7. python中*args和**args的不同

    上一段代码,大家感受一下 def test_param(*args): print(args) def test_param2(**args): print(args) test_param('tes ...

  8. linux --备份oracle

    1.exp\imp 导入导出命令使用exp username/pwd@sid file=path.dmp owner=user 不导出表数据:rows=n举例:exp iflashbuy/qwerwh ...

  9. java 11-8 在大串中查找小串的案例

    1.统计大串中小串出现的次数 举例: 在字符串"woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun& ...

  10. Android中Intent传值与Bundle传值的区别详解

    Android中Intent传值与Bundle传值的区别详解 举个例子我现在要从A界面跳转到B界面或者C界面   这样的话 我就需要写2个Intent如果你还要涉及的传值的话 你的Intent就要写两 ...