20145216史婧瑶《Java程序设计》第3周学习总结

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

教材学习内容总结

第四章 认识对象

4.1 类与对象

•对象(Object):存在的具体实体,具有明确的状态和行为

•类(Class):具有相同属性和行为的一组对象的集合,用于组合各个对象所共有操作和属性的一种机制

•从类看对象:类定义可以视为一个具有类似特性与共同行为的对象的模板,可用来产生对象

•从对象看类:类的产生,是从少数实例,推广到大量相似实例的抽象化过程(abstraction)

•类是对象的设计图,对象是类的实例,生成对象要先定义类。类定义时使用class关键词,建立实例要使用new关键词。以类名称声明的变量,称为参考名称、参考变量或直接叫参考。

•一个原始码中可以有很多个类定义,但只能有一个是公开类,且文档中的主文档名必须与公开类名称相同。只要有一个类定义,编译程序就会产生一个.class文档。

•对象指定与相等性:

当=用于基本类型时,是将值复制给变量,当==用于基本类型时,是比较两个变量储存的值是否相同。

当你在操作对象时,=是用在指定参考名称参考某个对象,而==是用在比较两个参考名称是否参考同一对象。

注意:别使用==或!=来比较两个对象实质内容值是否相同,要使用equals()

4.2基本类型打包器

•为了让Java 基本类型像类一样使用

int-Integer

long-Long

byte-Byte

float-Float

double-Double

boolean-Boolean

4.3数组对象

•在Java中,数组是对象。

•与C语言不同,Java需要检查数组边界,越界会触发ArrayIndexOutOfBoundsException异常。

•无论System.arraycopy()还是Arrays.copyof(),用在类类型声明的数组时,都是执行浅层复制。

4.4字符串对象

•在Java中,字符串是java.lang.String实例,用来打包字符数组。

•在Java中,以""包括的字符串,只要内容相同(序列、大小写相同),无论在代码中出现几次,JVM都只会建立一个String实例。

第五章 对象封装

5.1 何谓封装

•封装(Encapsulation)实际上使用方法(Method)将类的数据隐藏起来,控制用户对类的修改和访问数据的程度,隐藏对象细节,将对象当作黑箱进行操作。

通过构造方法(构造函数)封装初始化流程

通过成员方法(函数)封装操作

通过成员变量封装数据

5.2类语法细节

•如果没有声明权限修饰的成员,只有在相同包的类程序代码中才可以直接存取,也就是“包范围权限”。如果想在其他包的类程序代码中存取某包的类或对象成员,则该类或对象成员必须是公开成员,在Java中要使用public加以声明。

•如果定义类时,没有撰写任何构造函数,编译程序会自动加入一个无参数、内容为空的构造函数,称为默认构造函数。可以定义多个构造函数,只要参数类型或个数不同,这称为重载构造函数。

•在Java中,this()代表了调用另一个构造函数,且this()调用只能出现在构造函数的第一行。

•被声明为static的成员,不会让个别对象拥有,而是属于类。

•以类命名实例来说,首字母是大写,以static使用习惯来说,是通过类名称与“.”运算符来存取。

•在static方法或区块中不能出现this关键字。static方法中不能用非static数据或方法成员。

•使用import static语法要注意名称冲突问题,有些名称冲突编译程序可通过以下顺序来解析。

局部变量覆盖:选用方法中的同名变量、参数、方法名称。

成员覆盖:选用类中定义的同名数据成员、方法名称。

重载方法比较:使用import static的各个静态成员,若有同名冲突,尝试通过重载判断。

教材学习中的问题和解决过程

问题1:

没有看懂书上p86页代码中的:

int number = (int)(Math.random()*10);

解决过程:

通过上网百度,得到如下解释:

Math.random()是令系统随机选取大于等于0.0且小于1.0的伪随机double值,是Java、js等语言常用代码。

例如:Number=Math.random()*2+1,即设置一个随机1到3(取不到3)的变量。

问题2:

由于以前学的for循环语法都是:

for(初始式;执行结果必须是boolean的重复式;重复式){

描述句;

}

所以当看到书上p96页的for循环语法时(具体语句如下),便感到很难理解。

for(int score:scores){

System.out.printf("学生分数:%d %n",score);

}

解决过程:

通过反复看书上的解释和上网查找资料,我知道了该语法是增强式for循环,执行结果其实与以前学的for循环语句相同

,但是编写代码时会更简洁方便。其具体执行过程是:上面的程序片段取得scores数组第一个元素,指定给score变量

后执行循环体,接着取得scores中第二个元素,指定给score变量后执行循环体,依次类推,直到scores数组中所有

元素都访问完为止。

代码调试中的问题和解决过程

问题1:

当敲到书上p124页的代码时,运行结果有问题,具体代码与错误如下:

解决过程:

经过反复看书中的代码实例与文字解析,我明白了该段代码中调用了函数,而书中给的代码并不完整,缺少构造函数的部分,因此出现如图所示错误,于是,我试着将构造函数的代码片段补上,重新运行,最后运行成功,代码与结果如下:

总结:Java的构造函数语法,能够实现对象初始化流程的封装,封装对象初始化流程的好处是用户不用重复撰写对象初始化流程,甚至不需要知道对象如何初始化,并且只要修改构造函数的内容,重新编译并给予位码文档之后,用户便无须再修改程序。

问题2:

在敲书上P128页的代码时,发现它与124页的代码有相同的问题,于是我再次补上构造函数的代码,原以为这次会万无一失,结果运行时又出现了一个错误,截图如下:

解决过程:

由于这个错误与之前的错误类似,所以我认为应该也是缺少了某些代码片段,于是我又回归教材,很快我便知道了错误所在,该段代码直接使用了store()方法,而没有定义储值用的store()方法,同样,我加上定义store()方法的代码后,程序便运行成功,截图如下:

总结:定义储值用的store()方法其实就是将储值重复流程封装到store()方法中,这么做的好处是用户不用再一遍一遍地敲储值的重复代码,并且在修改store()的流程时,也很方便,可以直接在定义的方法中修改。

其他(感悟、思考等,可选)

这周学到第四、五章,我感觉到Java这门课越来越难,开始本想通过看书来自学,后来发现仅仅只看书并不能完全弄懂知识点,书中给出的代码实例也总是看不懂,于是,我继续看视频,边看边做笔记,不懂的地方也记下来,然后上网查找资料来弄懂,最后再敲书上的代码,发现比之前轻松许多。虽然这周学习Java感到吃力,但我完成学习任务后却觉得很有成就感。

代码托管截图:

   

学习进度条

  代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 4500行 30篇 350小时 能将java运用自如 
第一周 150/150 2/2 15/15 学习了与java相关的基础知识 
第二周 200/350 1/3 20/35
学习了java的基本语法

 第三周  450/800  1/4 25/60 
学习了对象和封装的相关知识

时间: 2024-08-10 19:11:23

20145216史婧瑶《Java程序设计》第3周学习总结的相关文章

20145216史婧瑶《信息安全系统设计基础》第十一周学习总结

20145216史婧瑶<信息安全系统设计基础>第十一周学习总结 教材内容总结 第八章 异常控制流 平滑:指在存储器中指令都是相邻的. 突变:出现不相邻,通常由诸如跳转.调用.和返回等指令造成. 异常控制流ECF:即这些突变. 关于ECF: 1.ECF是操作系统用来实现I/O.进程和虚拟存器的基本机制 2.应用程序通过使用一个叫做陷阱或者系统调用的ECF形式,向操作系统请求服务 3.ECF是计算机系统中实现并发的基本机制 4.软件异常机制--C++和Java有try,catch,和throw,C

20145216史婧瑶《信息安全系统设计基础》第3周学习总结

20145216史婧瑶<信息安全系统设计基础>第3周学习总结 教材学习内容总结 十六进制表示法C表示法以0x或0X开头的数字常量为十六进制进制转换常用进制:二进制(B),十进制(D),八进制(O或者Q),十六进制(H) 转换为二进制-十六进制相互转换,二进制的四位数字对应十六进制的一位数字. 同理,二进制与八进制的转化是三位对应一位. 但是通常情况下,进制转换都以二进制为桥梁进行转换. 对于一个字长为w位的机器来说,虚拟地址的范围是0~2^w-1.程序最多访问2的w次方个字节. 数据大小: 在

20145216史婧瑶《信息安全系统设计基础》第九周学习总结

20145216史婧瑶<信息安全系统设计基础>第九周学习总结 教材内容总结 第十章 系统级I/O 输入/输出(I/O)是在主存和外部设备之间拷贝数据的过程. 第一节 Unix I/O 这一节涉及到操作系统的基本抽象之一--文件.也就是说,所有的I/O设备都被模型化为文件,而所有的输入输出都被当做对相应文件的读/写.相关的执行动作如下: 1.打开文件: 应用程序向内核发出请求→要求内核打开相应的文件→内核返回文件描述符 文件描述符:一个小的非负整数,用来在后续对此文件的所有操作中标识这个文件.有

20145216史婧瑶 《信息安全系统设计基础》第2周学习总结

20145216史婧瑶 <信息安全系统设计基础>第2周学习总结 教材学习内容总结 一.VIM 1.hjkl所表示的即为光标 ←↓↑→,前提是要在normal的状态下.方便记忆j像一个笔就像下箭头. ·i → Insert 模式,可插入文本.按 ESC 回到 Normal 模式. ·A → 输入欲添加文本(在一行后添加文本).按 ESC 回到 Normal 模式. ·x → 删当前光标所在的一个字符. ·:wq → 存盘 + 退出 (:w 存盘, :q 退出) 2.删除类命令: 该命令为操作符d

20145216史婧瑶《信息安全系统设计基础》第7周学习总结

20145216史婧瑶<信息安全系统设计基础>第七周学习总结 教材内容总结 第六章 存储器层次结构 存储器系统是一个具有不同容量.成本和访问时间的存储设备的层次结构. CPU寄存器.高速缓存存储器.主存储器.磁盘. 第一节 存储技术 一.随机访问存储器(RAM) 1.RAM分类: 静态的SRAM-更快,更贵,作为高速缓存存储器,CPU片上或片下 动态的DARM-作为主存以及图形系统的帧缓冲区 2.非易失性存储器--ROM (1)分类 PROM-可编程ROM,只能被编程一次 EPROM-可擦写可

20145216史婧瑶《信息安全系统设计基础》第6周学习总结

20145216史婧瑶<信息安全系统设计基础>第6周学习总结 教材内容总结 第四章 处理器体系结构 第一节 Y86指令集体系结构 一.程序员可见的状态 1.含义:每条指令都会读取或修改处理器状态的某些部分 2."程序员":可以是用汇编代码写程序的人,也可以是产生机器级代码的编译器 3.具体的处理器状态:类似于IA32 有8个程序寄存器:%eax,%ecx,%edx,%ebx,%esi,%edi,%esp,%ebp 处理器的每个程序寄存器存储一个字 寄存器%esp被入栈.出栈

20145216史婧瑶《网络对抗》Web安全基础实践

20145216史婧瑶<网络对抗>Web安全基础实践 实验问题回答 (1)SQL注入攻击原理,如何防御 攻击原理: SQL注入攻击指的是通过构建特殊的输入作为参数传入web应用程序,而这些输入大都是SQL语法里的一些组合,程序通过执行SQL语句进而执行攻击者所要的操作.其主要原因是程序没有细致的过滤用户输入的数据,致使非法数据侵入系统. 防御方法: 对输入的数据进行过滤,将常见的sql语句的关键词:select or ' " 等字符进行过滤. 对在数据库中对密码进行加密,验证登陆的时

20145216史婧瑶《网络对抗》网络欺诈技术防范

20145216史婧瑶<网络对抗>网络欺诈技术防范 实验问题回答 (1)通常在什么场景下容易受到DNS spoof攻击 攻击者能对在同一网段可以ping通的电脑发起DNS spoof攻击,所以一般在连接公用Wi-Fi的情况下电脑容易受到DNS spoof攻击. (2)在日常生活工作中如何防范以上两种攻击方法 1.尽量避免连接公用Wi-Fi2.在访问网站时注意观察它的IP地址 实验总结与体会 这次实验我遇到了许多问题,第一个是我做简单应用SET工具建立冒名网站这个实验的时候,第一次克隆的是腾讯页

20145216史婧瑶《网络对抗》逆向及Bof进阶实践

20145216史婧瑶<网络对抗>逆向及Bof进阶实践 基础知识 Shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并将堆栈的返回地址利用缓冲区溢出,覆盖成为指向 shellcode的地址. Linux中两种基本构造攻击buf的方法:retaddr+nop+shellcode ,nop+shellcode+retaddr ,缓冲区小就就把shellcode放后边,不然就放前边. 实验步骤 1.准备一段shellcode代码 2.设置环境 Bof攻击防御

20145216史婧瑶 《网络对抗》 MSF基础应用

20145216史婧瑶 <网络对抗> MSF基础应用 实验回答问题 用自己的话解释什么是exploit,payload,encode. exploit:渗透攻击模块,测试者利用它来攻击一个系统,程序,或服务,以获得开发者意料之外的结果. payload:攻击载荷模块,由一些可动态运行在远程主机上的代码组成 encode:编码器模块,对指令重新进行编码,用以实现反检测功能.指令顺利执行等 实践过程 主动攻击(ms08_067漏洞) MS08_067远程漏洞攻击实践:Shell 1.在VMware