20155314 2016-2017-2 《Java程序设计》第3周学习总结
20155314 2016-2017-2 《Java程序设计》第3周学习总结
教材学习内容总结
学习目标
- 区分基本类型与类类型
- 理解对象的生成与引用的关系
- 掌握String类和数组
- 理解封装的概念
- 掌握构造方法的定义
- 理解重载的概念
- 掌握static的应用
get到的重点
第四章 认识对象
关键词:
class
:定义类new
:新建一个对象(实例)
一个原始码中可以有多个类定义,但只能有一个是公开类,且文档中的主文档名必须与公开类名称相同
只要有一个类定义,编译程序就会产生一个.class文档
定义构造函数:在建立对象时一并进行某个初始流程,像是指定数据成员值
标准类的使用:
java.util.Scanner
:在“命令提示符”模式下取得用户输入java.math.BigDecimal
:在浮点数运算中得到更好的精确度(Java使用分数与指数来表示浮点数)
=是用在指定参考名称参考某个对象,而==是用在比较两个参考名称是否参考同一对象
Long
、Integer
、Double
、Float
、Boolean
、Byte
等类:打包器,提供对象实例作为“壳”,将基本类型打包在对象之中,就像将基本类型当作对象操作自动装箱、拆箱——编译程序蜜糖:编译时期根据所撰写的语法,决定是否进行装箱或拆箱动作
在Java中数组是对象
声明数组时建议将[]放在类型关键词之后(Java开发人员撰写习惯);在声明的参考名称旁加上[]并指定索引,就可以取得对应值,把设定值给数组中某个元素也是通过索引
增强式for循环——编译程序蜜糖
n维数组使用n个索引存取数组元素
使用
new
关键词指定长度建立数组使用
java.util.Arrays
的fill()
方法来设定新建数组的元素值代表建立数组对象的类由JVM动态产生
用
new
建立二维数组:int[][] cords=new int[m][n];
——建立了一个int[][]
类型的对象,里面有2个int[]
类型的索引,分别是参考长度为n的一维数组对象,初始值都是0Java中的多维数组基本上都是由一维数组组成
类类型建立数组(每个索引都参考至null):
Integer[] scores=new Integer[3];
建立了0个Integer
实例Integer[][] cords=new Integer[3][2];
建立了0个Integer
实例
Java中数组一旦建立,长度就固定了
数组复制:
- 浅层复制:
System.arraycopy(来源数组,来源起始索引,目的数组,目的起始索引,复制长度)
Arrays.copyOf(来源数组,复制长度)
- 深层复制
- 浅层复制:
对于类类型声明的数组要注意参考的行为
字符串:本质是打包字符数组的对象,是
java.lang.String
类的实例使用+运算来连接字符串
字符串特性:
- 字符串常量:用
""
写下的字符串 - 字符串池:以
""
包括的字符串,只要内容(序列、大小写)相同,无论在程序代码中出现几次,JVM都只建立一个String
实例,并在字符串池中维护 - 不可变动字符串:字符串对象一旦建立就无法更改对象中任何内容,对象上没有任何方法可以改变字符串内容
- 字符串常量:用
比较字符串实际字符内容是否相同,不要使用
==
,要使用equals()
第五章 对象封装
类语法细节
- public
- 用在类前
- 用在方法前
- 用在成员变量前
- private:用在成员变量前
- 方法重载(Overload)
- 参数类型和个数不同
- 与返回值无关
- this与super
- final
- 用在类前
- 用在方法前
- 用在成员变量前
- static:所有对象公有的
- 用在类前
- 用在方法前
- 用在成员变量前
- 访问惯例:类名.static成员
- 与C语言中的static区分
教材学习中的问题和解决过程
关于IntelliJ IDEA下命令行自变量的指定
关于命令行自变量,课本P109有如下介绍:
在启动JVM并指定执行类时,可以一并指定命令行自变量。例如:
> java cc.openhome.Average 1 2 3 4
上面这个指令代表启动JVM并执行cc.openhome.Average
类,而Average
类会接受1
、2
、3
、4
这四个自变量,这四个自变量会收集为String
数组,由main()
中的args
参考。
于是我便毫不犹豫地敲入以下代码:
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);
}
}
再毫不犹豫地一编译结果出问题了,输出居然是NaN?这到底是什么东东??顺手百度一下:
- NaN,是Not a Number的缩写,在IEEE浮点数算术标准(IEEE 754)中定义,表示一些特殊数值(无穷与非数值(NaN)),为许多CPU与浮点运算器所采用。
- NaN用于处理计算中出现的错误情况,比如 0.0 除以 0.0 或者求负数的平方根。
其中Java中遭遇NaN和Java中的Infinity和NaN两篇博客分别详细介绍了特殊数字NaN的产生条件、性质属性以及危害等,so professional(>_<)看完之后令人耳目一新~但是,这段代码并未涉及到浮点数运算,因此此处NaN的产生并不属于博客中所列的情况。到底怎么回事呢?再回头看看课本P109的那段代码,哦豁,这次我注意到了代码上边的一句话:
这段代码可以让用户命令行自变量提供整数,计算出所有整数平均:
!!命令行自变量?!让用户提供?!不会类似C语言中的命令行参数吧!这不禁勾起了我的回忆:
#include <stdio.h>
int main(int argc,char *argv[])
{
int i;
printf("The number of command line arguments is:%d\n",argc);
printf("The program name is:%s\n",argv[0]);
if(argc>1)
{
printf("The other arguments are following:\n");
for(i=1;i<argc;i++)
{
printf("%s\n",argv[i]);
}
}
return 0;
}
在C中,main()
通过形参获得命令行参数传递给程序,而命令行参数则用字符指针数组*argv[]
来表示和接收。我还记得命令行参数的程序要在酷炫的DOS命令提示符界面下操作(>_<)虽然在C程序设计基础课上没有过多讲解,但是老师说命令行参数还是很有用的,特别是在批处理命令中使用广泛。而在Java的IDE中也可以指定JVM启动时可用的一些自变量,遗憾的是书上这样写道:
例如在NetBeans中,可以这样设定:
……
什么?!我用的可是IntelliJ啊喂!NetBeans的命令行教程什么鬼!无奈只能再次求助于百度(>_<)好在找到了一篇适合自己用的好教程:怎么在IntelliJ IDEA的输入命令行参数?(How do you input commandline argument in IntelliJ IDEA?)如下图,在macOS中,我们可以control + alt + R
调出Run菜单,按键盘的➡️,然后按E
,回车:
在Program arguments一栏中输入命令行参数(注意用空格隔开),最后点Run就完成啦~
输出1、2、3、4四个数的平均数2.5没毛病!hhh好通俗易懂的教程~
课后习题
所谓“实践是检验认识真理性的唯一标准”,我在IntelliJ IDEA上把教材第三章课后练习题又敲了一遍,给出了自己的答案,并加上了一些自己的分析,通过逐题进行代码调试实践的方式来深入对java类与对象的理解。小白在此恳请大家积极指出错误的地方(>_<)
4.7.1 选择题
A 分析:
public class Exercise4711 {
public static void main(String[] args) {
int x=100;
int y=100;
Integer wx=x;
Integer wy=y;
System.out.println(x==y);
System.out.println(wx==wy);
}
}
A 分析:
public class Exercise4712 {
public static void main(String[] args) {
int x=200;
int y=200;
Integer wx=x;
Integer wy=y;
System.out.println(x==wx);
System.out.println(y==wy);
}
}
A 分析:
public class Exercise4713 {
public static void main(String[] args) {
int x=300;
int y=300;
Integer wx=x;
Integer wy=y;
System.out.println(wx.equals(x));
System.out.println(wy.equals(y));
}
}
B 分析:
public class Exercise4714 {
public static void main(String[] args) {
int[] arr1={1,2,3};
int[] arr2=arr1;
arr2[1]=20;
System.out.println(arr1[1]);
}
}
A 分析:
public class Exercise4715 {
public static void main(String[] args) {
int[] arr1={1,2,3};
int[] arr2=new int[arr1.length];
arr2=arr1;
for(int value:arr2) {
System.out.printf("%d",value);
}
}
}
C 分析:
- 首先String不属于8种基本数据类型,String是一个对象。 因为对象的默认值是null,所以String的默认值也是null;但它又是一种特殊的对象,有其它对象没有的一些特性。
- new String()和new String(“”)都是申明一个新的空字符串,是空串不是null;
- String str=”kvill”; String str=new String (“kvill”);的区别: 在这里,我们不谈堆,也不谈栈,只先简单引入常量池这个简单的概念。 常量池(constant pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。
B
C
A 分析:
public class Exercise4719 {
public static void main(String[] args) {
String[][] strs={
{"java","java","java"},
{"java","java","java","java"}
};
System.out.println(strs.length);
System.out.println(strs[0].length);
System.out.println(strs[1].length);
}
}
C
代码调试中的问题和解决过程
关于“类重复”的问题
敲代码在敲教材4.3.3数组复制一节的代码时,
DeepCopy时,呃??改了名字还编译不过?仔细一看竟是它!
代码托管
- 运行statistics:
上周考试错题总结
Linux Bash中,查找当前目录中前天创建的Java文件的命令是(find . –name *.java -ctime 2)。
- 错误原因:啊没看清题意“当前目录”,直接写成/home/(>_<)
~0b1011的十进制值是(-12)。
错误原因:当时根本没有看到前面还有个
~
,真的,于是直接看1011就写11了(>_<)理解情况:经过周三Java课上娄老师详细地讲解之后,我终于明白原来这道题的内幕是这样的:
由于内存是字节数组,0b1011转化为8位二进制码是00001011,~
代表逐位取反,于是~
后便为11110100,有符号数最高位1表示是负数,还需要对它进行求补运算即取反(符号位不变)再+1才能得到其原码,即:~11110100+1=10001011+1=10001100(-12!)这道题如此经典易错,一定会循环考的~!很重要喔!(敲黑板)
P64 Shift.java中第三个printf的输出结果是”2的2次方:4”。(X)
运行p69 Odd.class的命令为(java cc.openhome.Odd)。
其他
其实这周的计划学习时间没有根据实际来制定,本周的学习任务相比前两周要艰巨很多,从自学一章到自学两章,真正实现起来还是有一定难度的,尽管敲完了书上两章的所有代码,但也只是精读第四章,较为粗略的浏览第五章。这两章对初学者来说其实有很多点值得细细推敲,要是学习时间安排地更充裕一些就更好了,同时也希望自己能提高学习效率。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 34/34 | 1/4 | 12/12 | |
第二周 | 360/394 | 1/5 | 16/28 | |
第三周 | 701/1018 | 1/6 | 19/ 47 |
计划学习时间:15小时
实际学习时间:19小时
参考资料
- Java中遭遇NaN
- Java中的Infinity和NaN
- 怎么在IntelliJ IDEA的输入命令行参数?(How do you input commandline argument in IntelliJ IDEA?)
- Java字符串类型详解
- JAVA的String 类
- 漫谈deepcopy(深拷贝)和shallowcopy(浅拷贝)
- 反编译与反汇编
- Java学习笔记(第8版)
- 《Java学习笔记(第8版)》学习指导
20155314 2016-2017-2 《Java程序设计》第3周学习总结的更多相关文章
- 20155336 2016-2017-2《JAVA程序设计》第九周学习总结
20155336 2016-2017-2<JAVA程序设计>第九周学习总结 教材学习内容总结 第十六章 JDBC(Java DataBase Connectivity)即java数据库连接 ...
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 20145213《Java程序设计》第一周学习总结
20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145330孙文馨 《Java程序设计》第一周学习总结
20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...
- 20145337 《Java程序设计》第九周学习总结
20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...
- 20145337 《Java程序设计》第二周学习总结
20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...
- 20145218《Java程序设计》第一周学习总结
20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...
- 《Java程序设计》第九周学习总结
20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...
随机推荐
- JDBC使用DBUtils
1.commons-dbutils commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jd ...
- python中类的约束和限制对象添加属性
通过__slots__限制对象可添加的属性 class A: __slots__ = ['a', 'b'] pass a1 = A() a1.a = 10 print(a1.a) a1.c = 0 # ...
- C# 一个方法如何返回多个值
通常一个方法只能返回一个值,但是如果在某些时候,我们想要返回多个值,例如某个方法将一个浮点数分割成一个整数和一个小数返回.这个时候我们就要用到out关键字. using System; namespa ...
- windows下生成上传git时需要用的SSH密钥
参考:Windows上传代码到Github 打开“Git Bash” 输入 ssh-keygen -C "your email" -t rsa 出现如下结果: 成功后,信息里会显示 ...
- vue生命周期理解
https://segmentfault.com/a/1190000008010666?utm_source=tag-newest
- 润乾报表在proxool应用下的数据源配置
大多数应用会使用proxool数据连接池,proxool.xml的配置文件如下: <?xml version="1.0″ encoding="UTF-8″?> & ...
- Oracle EBS 查看请求执行情况
SELECT s.* FROM fnd_concurrent_requests r, v$session v, v$sql s WHERE r.oracle_session_id = v.audsid ...
- ARDUINO 积木式编辑器整理
原文地址:https://blog.everlearn.tw/arduino/arduino-%E7%A9%8D%E6%9C%A8%E5%BC%8F%E7%B7%A8%E8%BC%AF%E5%99%A ...
- 转: c# 字符串公式计算
C# 自动计算字符串公式的值(三种方式) 从网络上找到这段源码,重新整理后测试通过. 有三种方式可自动计算字符串公式的值:1. 最简单的方式,由SQL语句计算2. 使用Microsoft.Javasc ...
- Man's Best Friend: The Science Behind the Dog and Human Relationship
http://info.thinkfun.com/stem-education/mans-best-friend-the-science-behind-the-dog-and-human-relati ...