20155306 2006-2007-2 《Java程序设计》第3周学习总结

20155306 2006-2007-2 《Java程序设计》第3周学习总结

教材学习内容总结

第四章 认识对象

4.1 类与对象

定义类

1.先在程序中定义类:

 Clothes{
String color;
Char size;
}//定义color和size两个对象数据成员

2.新建一个对象,并且将c1名称参考至新建对象

CLothes c1 = new Clothes();

类分为公开类和非公开类,一个原始码中可以有多个类定义,但只能有一个公开类,但,且文档中的主文档名必须与公开类名称相同。(只要有一个类定义,就会编译产生一个.class文件)

标准类

  1. java.util.Scanner:Scanner

    nextInt()方法会看标准输入中,有没有输入下一个字符串(以空格或换行分隔),将其剖析为int或其他nextByte()型等等 ,直接取得上一个字符串使用next(),取得整行文字nextLine()(以换行分隔)

import java.util.Scanner;

    public class Guess {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int number = (int)(Math.random() * 10);
int guess; do{
System.out.print("猜数(0 ~ 9):");
guess = scanner.nextInt();
}while(guess != number); System.out.println("猜中了!");
}
}
  1. java.math.BigDecimal

    以默认精度,提供plus()、subtract()、multiply()、divide()可以进行加减乘除运算,都会返回运算结果

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.subtract(operand2);
System.out.println(result);
}
}

对象制定与相等性

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

用于操作对象时:=指定参考名称参考某个对象用在操作对象;==比较两个参考名称是否参考同一对象

equals():用于操作对象,比较两对象的值是否相同

4.2 基本类型包装

Java中分为两个类型系统为基本类型与类类型。将基本类型打包在对象之中,将基本类型当作对象来操作,可以使用(Wrapper):Long、Integer、Double、Float、Boolean、Byte来打包基本类型。

package cc.openhome;
public class IntegerDemo {
public static void main(String[] args){
int data1 = 10;
int data2 = 20;
Integer wrapper1 = new Integer(data1);
Integer wrapper2 = new Integer(data2);
System.out.println(data1 / 3);
System.out.println(wrapper1.doubleValue() / 3);
System.out.println(wrapper2.compareTo(wrapper2));
}
}

自动装箱、拆箱

Integer wrapper =10;//自动装箱
int foo = wrapper;//自动拆箱

自动拆装箱是编译程序蜜糖,不能让变量参考至空对象又对之进行操作,也不能超过打包器的值域范围

无论两个变量打包的值位于哪个范围,只要变量打包的值相同,equals()比较的结果就会是true

4.3 数组对象

Java中,数组就是对象,而不是单纯的数据结合。

依次取出数组中每个值的方法,一种是for循环:

public class Score {
public static void main(String[] args){
int[] scores = {88,81,74,68,78,76,77,85,95,93};
for(int i = 0; i < scores.length; i++){
System.out.printf("学生分数:%d %n",scores[i]);
}
}
}

增强式for循环:

public class EnhanceScore {
public static void main(String[] args){
int[] scores = {88,81,74,68,78,76,77,85,95,93};
for(int score : scores){
System.out.printf("学生分数:%d %n",score);
}
}
}

声明二维数组,要使用两个索引来存取数组元素:

public class XY {
public static void main(String[] args) {
int[][] cords = {
{1, 2, 3},
{4, 5, 6}
};
for (int x = 0; x < cords.length; x++) {
for (int y = 0; y < cords[x].length; y++) {
System.out.printf("%2d", cords[x][y]);
}
}
}
}

增强for循环:

public class EnhanceXY {
public static void main(String[] args) {
int[][] cords = {
{1, 2, 3},
{4, 5, 6}
};
for (int [] row : cords){
for(int value : row){
System.out.printf("%d",value);
}
System.out.println();
} }
}

利用java.util.Arrays的fill()方法来设定新建数组的元素值:

import java.util.Arrays;

public class ArrayScore {
public static void main(String[] args){
int[] scores = new int[10];
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. 基本方法是另行建立新数组,使用System.arraycopy(),五个参数:来源数组、来源起始索引、目的数组、目的起始索引、复制长度。

  2. Array.copyof()方法不用另行建立新数组,浅层复制

浅层复制:c1每个索引处所参考的对象,也给c2每个索引来参考,用在类类型声明的数组时,都是执行浅层复制,比如:System.arraycopy(),Array.copyof()

深层复制:实际上c1每个索引参考的对象会被复制,分别指定给c2每个牵引。

4.4 字符串对象

  • 字符串是打包字符数组的对象

  • 是以“”包括的字符串,只要内容完全相同,则只会建立一个String实例,并在字符串池中维护。

  • 字符串对象一旦建立,就无法更改对象中的任何内容。使用“+”连接字符串可以产生新的String实例

第五章 对象封装

5.1 何谓封装

  • 封装实际上使用方法将类的数据隐藏起来,隐藏对象细节,将对象当作黑箱操作,用户不用再需要重复撰写对象初始化流程
  • 在类中定义方法,如果不用返回值,方法名称前可声明void,方法若会返回值,必须在方法前声明返回值的类型

    -不想让用户直接*存取类私有数据,使用private定义;private可以用在方法或构造函数声明。声明为private的成员表现为类私有,用户无法在其他类的程序代码中直接存取。

5.2 类语法细节

  • 三个权限修饰:public、private、 protected

  • 定义方法时也可以重载,类似功能的方法名称虽然一致,但是根据传递的自变量类型不同,会调用相应的方法。

  • 除被声明static的地方外,this关键字可以出现在类中的任何地方。

  • this()代表调用另一个构造函数,根据调用时给的自变量类型与个数定调用哪个函数,只能出现在构造函数的第一行。

  • 被声明为static的成员,不用每个对象各自拥有,表示它属于类,通过类名称.static成员取得static成员;static方法或区块中,不能调用非static方法或区块。

  • 要使用不定长度自变量,声明参数列时要在类型关键字后加...,且方法上声明的不定长度参数必须是参数列最后一个,使用两个不定长度参数列是不合法的。

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

  • 问题一

    在增强for循环时的语法,为什么要换成 for(int score : scores)的形式,有什么具体的意义吗?

解答:通过百度,查阅资料知道原来是这样的形式:

增强for(part1:part2){part3};

part2中是一个数组对象,或者是带有泛性的集合.

part1定义了一个局部变量,这个局部变量的类型与part2中的对象元素的类型是一致的.

part3当然还是循环。

  • 问题二:在书中我们看到:对于基本类类型而言,“”用来是比较两个变量存储的值是否相同,,在类类型中,比较参考名是否参考同一对象。在自动拆箱和装箱中,为什么可以直接用“”来比较i1,i2,而且还可以用equals()?

    解答:没有解答

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

  • 问题1

    在敲书上代码的时候,出现了下图这样的问题。后来发现是自己同时点开两个程序,把public的类名写错了,与文件名不符合。

    20155306 2006-2007-2 《Java程序设计》第3周学习总结

20155306 2006-2007-2 《Java程序设计》第3周学习总结

代码托管

  • 代码提交过程截图:

    • 运行 git log --pretty=format:"%h - %an, %cd : %s" 并截图

      20155306 2006-2007-2 《Java程序设计》第3周学习总结
  • 代码量截图:

    • 运行 find src -name "*.java" | xargs cat | grep -v ^$ | wc -l 并截图

      20155306 2006-2007-2 《Java程序设计》第3周学习总结

上周考试错题总结

  • 填空:Linux Bash中,查找当前目录中前天创建的Java文件的命令是(find . –name *.java -ctime 2)
  • 填空:~0b1011的十进制值是(-12)
  • Java中, 数字235.00的类型是float. (X) 也可能是double型。 float x = 4.0则会报错,需要如下写法:

    float x = 4.0f或者float x = (float)4.0

    其中4.0f后面的f只是为了区别double,并不代表任何数字上的意义
  • 填空 :0x10%9 的结果是( 7 )
  • 填空 :0x10&9 的结果是(0)

    先把十六进制的数字写成二进制,再进行运算,在转化为十六进制。

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

考试前一晚把书好好又看了一遍,但是做题还是不行。感觉自己看书学习很难抓到那些小细节,对考点不敏感。很久没有这样自己去学一本书了,能力有点欠缺,但我相信长久下来,一定会有所进步的。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 20/20 1/2 15/15 完成JDK、IDEA下载,并且可以简单操作
第二周 150/200 1/2 18/20 开始可以撰写简单的代码,了解了一些常用的语法
第三周 327 /400 1/2 26/25 更深入认识类与对象,以及对象的封装,时间紧,任务重,需敲大量代码来熟练

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。

耗时估计的公式

:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

参考资料

上一篇:[UEditor]百度编辑器配置总结


下一篇:Gartner:数字银行需要新技术以及新一代厂商