20145201 《Java程序设计》第三周学习总结

教材学习内容总结

本周学习了课本第四、五章内容,即认识对象和对象封装。

第四章 认识对象

4.1类与对象

  1. 定义类

    要产生对象必须先定义类,类是对象的设计图,对象是类的实例。
  • 类定义时使用class关键词。
  • 建立实例时使用new关键词。
  • 代码示例:
  1. class Clothes
  2. {
  3. String color;
  4. char size;
  5. }
  6. public class Field
  7. {
  8. public static void main(String[] args)
  9. {
  10. Clothes sun = new Clothes();
  11. Clothes spring = new Clothes();
  12. sun.color = "red";
  13. sun.size = 'S';
  14. spring.color = "green";
  15. spring.size = 'M';
  16. System.out.printf("sun(%s,%c)%n",sun.color,sun.size);
  17. System.out.printf("spring(%s,%c)%n",spring.color,spring.size);
  18. }}
  • 运行结果

  • 构造函数

    构造函数是与类名称同名的方法。构造函数中,由于参数与数据类型重名,要使用this将参数值指定给对象的成员。

  • 代码示例:

  1. class Clothes2
  2. {
  3. String color;
  4. char size;
  5. Clothes2(String color, char size)
  6. {
  7. this.color=color;
  8. this.size=size;
  9. }
  10. }
  11. public class Field2
  12. {
  13. public static void main(String[] args)
  14. {
  15. Clothes2 sun = new Clothes2("red",'S');
  16. Clothes2 spring = new Clothes2("green",'M');
  17. System.out.printf("sun(%s,%c)%n",sun.color,sun.size);
  18. System.out.printf("spring(%s,%c)%n",spring.color,spring.size);
  19. }
  20. }

运行结果:

2.标准类

两个基本标准类:java.util.Scanner与java.math.BigDecimal。

  • java.util.Scanner

    使用java.util.Scanner的nextInt()方法会看标准输入中,有没有输入下一个字符串,有的话会尝试将之剖析为int类型。Scanner对每个基本类型都有对应的方法。

代码示例:

  1. import java.util.Scanner;
  2. public class Guess
  3. {
  4. public static void main(String[] args)
  5. {
  6. Scanner scanner = new Scanner (System.in);
  7. int number = (int) (Math.random() * 10);
  8. int guess;
  9. do
  10. {
  11. System.out.printf("GUESS A NUMBER:");
  12. guess = scanner.nextInt();
  13. }
  14. while(guess != number);
  15. System.out.println("YOU ARE RIGHT!");
  16. }
  17. }

运行结果:

  • java.math.BigDecimal

    使用java.math.BigDecimal类以便得到更好的精确度。

    代码示例:
  1. import java.math.BigDecimal;
  2. public class DecimalDemo
  3. {
  4. public static void main(String[] args)
  5. {
  6. BigDecimal operand1 = new BigDecimal ("1.0");
  7. BigDecimal operand2 = new BigDecimal ("0.8");
  8. BigDecimal result = operand1.subtract(operand2);
  9. System.out.println(result);
  10. }
  11. }

运行结果:

用BigDecimal比较相等时,可以直接利用返回的BigDecimal再调用add()方法,最后再调用equals()比较两个BigDecimal实质上是否相同。

代码如下:

  1. import java.math.BigDecimal;
  2. public class DecimalDemo2
  3. {
  4. public static void main(String[] args)
  5. {
  6. BigDecimal o1 = new BigDecimal ("0.1");
  7. BigDecimal o2 = new BigDecimal ("0.1");
  8. BigDecimal o3 = new BigDecimal ("0.1");
  9. BigDecimal result = new BigDecimal("0.3");
  10. if(o1.add(o2).add(o3).equals(result))
  11. {
  12. System.out.println("等于0.3");
  13. }
  14. else
  15. {
  16. System.out.println("不等于0.3");
  17. }
  18. }}

运行结果:

4.2 基本类型打包器

1.基本类型long、int、double、float、boolean等。将基本类型打包在对象之中,就可以将基本类型当作对象操作。

代码如下:

  1. public class IntegerDemo
  2. {
  3. public static void main(String[] args)
  4. {
  5. int data1 = 10;
  6. int data2 = 20;
  7. Integer wrapper1 = new Integer(data1);
  8. Integer wrapper2 = new Integer(data2);
  9. System.out.println(data1/3);
  10. System.out.println(wrapper1.doubleValue()/3); //操作打包器方法
  11. System.out.println(wrapper1.compareTo(w2));
  12. }
  13. }

运行结果:

2.自动装箱、拆箱

代码如下:

  1. public class IntegerDemo
  2. {
  3. public static void main (String[] args)
  4. {
  5. Integer data1 = 10;
  6. Integer data2 = 20;
  7. System.out.println(data1.doubleValue() /3);
  8. System.out.println(data1.compareTo(data2));
  9. }
  10. }

运行结果:

4.3 数组对象

数组基本上是用来收集数据,是具有索引的数据结构,在Java中要声明数组并初始值,代码如下

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

结果如图:

数组的length属性可以取得数组长度。也可用更方便的增强式for循环。

代码如下:

  1. public class XY
  2. {
  3. public static void main(String[] args)
  4. {
  5. int[][] cords={
  6. {1,2,3},
  7. {4,5,6}
  8. };
  9. for(int[] row : cords)
  10. {
  11. for(int value : row)
  12. {
  13. System.out.printf("%2d",value);
  14. }
  15. System.out.println();
  16. }
  17. }}

运行结果:

2.操作数组对象

在Java中只要看到new,一定是建立对象,这个语法代表了数组就是对象。使用new建立数组后,每个索引元素会有默认值,如果默认值不符合需求,则可以使用java.util.Arrays的fill()方法来设定新建数组的元素值。

eg.将每个学生的成绩默认为60分起:

  1. import java.util.Arrays;
  2. public class Score
  3. {
  4. public static void main(String[] args)
  5. {
  6. int[] scores = new int[10];
  7. for(int score : scores)
  8. {
  9. System.out.printf("%2d",score);
  10. }
  11. System.out.println();
  12. Arrays.fill(scores,60);
  13. for(int score : scores)
  14. {
  15. System.out.printf("%3d",score);
  16. }
  17. }}

运行结果:

3.数组复制

数组复制的基本做法是另行建立新数组。

System.arraycopy()方法,它会使用原生方式复制每个索引元素,比自行使用循环来得快。System.arraycopy()的五个参数分别是来源数组、来源起始索引、目的数组、目的起始索引、复制长度。

  • Arrays.copyOf()方法建立新数组

    代码如下:
  1. import java.util.Arrays;
  2. public class CopyArray
  3. {
  4. public static void main(String[] args)
  5. {
  6. int[] scores1 = {88,81,74,68,78,76,77,85,95,93};
  7. int[] scores2 = Arrays.copyOf(scores1,scores1.length);
  8. for(int score : scores2)
  9. {
  10. System.out.printf("%3d",score);
  11. }
  12. System.out.println();
  13. scores2[0] = 99;
  14. for(int score : scores1)
  15. {
  16. System.out.printf("%3d",score);
  17. }
  18. }}

运行结果:

  • System.arraycopy()和Arrays.copyOf(),用在类类型声明的数组时,都是执行浅层复制。
  • 深层复制是每个索引的参考对象也会被复制。

    代码如下:
  1. class Clothes2
  2. {
  3. String color;
  4. char size;
  5. Clothes2(String color, char size)
  6. {
  7. this.color=color;
  8. this.size=size;
  9. }
  10. }
  11. public class DeepCopy
  12. {
  13. public static void main(String[] args)
  14. {
  15. Clothes2[] c1 = {new Clothes2("red",'L'),new Clothes2("blue",'M')};
  16. Clothes2[] c2 = new Clothes2[c1.length];
  17. for(int i = 0; i < c1.length; i++)
  18. {
  19. Clothes2 c = new Clothes2(c1[i].color, c1[i].size);
  20. c2[i] = c;
  21. }
  22. c1[0].color = "yellow";
  23. System.out.println(c2[0].color);
  24. }
  25. }

运行结果:

4.4字符串对象

在Java中,字符串本质是打包字符数组的对象,是java.lang.String类的实例。

1.字符串基础

  • 可以使用length()取得字符串长度,使用charAt()指定取得字符串中某个字符,使用toUppercase()将原本小写的字符串内容转为大写。
  • 如果有一个char[]数组,也可以使用new来创建String。使用String的toCharArray()方法,以将字符串以char[]数组返回。

    eg. 让用户输入整数,输入0后会计算所有整数总和并显示。

    代码如下:
  1. import java.util.Scanner;
  2. public class Sum{
  3. public static void main(String[] args){
  4. Scanner scanner = new Scanner(System.in);
  5. long sum = 0;
  6. long number = 0;
  7. do
  8. {
  9. System.out.print("输入数字:");
  10. number = Long.parseLong(scanner.nextLine());
  11. sum += number;
  12. }while(number != 0);
  13. System.out.println("总和为:"+sum);
  14. }
  15. }

运行结果:

2.字符串特性:

  • 字符串常量与字符串池:用“”写下的字符串称为字符串常量,在JVM中只会建立一个String实例。

  • 不可变动字符串:在java中,字符串对象一旦建立,就无法更改对象中任何内容,对象上没有任何方法可以更改字符串内容。可以使用 + 连接字符串,并用StringBuilder来改善。

    代码如下:

  1. public class OneTo100
  2. {
  3. public static void main(String[] args)
  4. {
  5. StringBuilder builder = new StringBuilder();
  6. for(int i = 1; i < 100; i++)
  7. {
  8. builder.append(i).append('+');
  9. }
  10. System.out.println(builder.append(100).toString());
  11. }}

运行结果:

4.5查询API文档

学习Java要学会使用Java API,具有检索功能,使用方便。

第五章 对象封装

5.1何谓封装

  • 封装(Encapsulation)是面向对象方法的重要原则,就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。封装目的主要是隐藏对象细节。

    eg.定义构造函数,并用数组显示。
  1. class Cashcard{
  2. String number;
  3. int balance;
  4. int bonus;
  5. CashCard(String number,int balance,int bonus){
  6. this.number = number;
  7. this.balance = balance;
  8. this.bonus = bonus;
  9. }
  10. }
  11. public class CardApp
  12. {
  13. public static void main(String[] args)
  14. {
  15. CashCard[] cards={
  16. new CashCard("A001",500,0),
  17. new CashCard("A002",300,0),
  18. new CashCard("A003",1000,1),
  19. new CashCard("A004",2000,2),
  20. new CashCard("A005",3000,3)
  21. };
  22. for(CashCard card : cards)
  23. {
  24. System.out.printf("(%s,%d,%d)%n",card.number,card.balance,card.bonus);
  25. }
  26. }}

eg.建立三个CashCard对象使用数组

  1. import java.util.Scanner;
  2. public class CardApp
  3. {
  4. public static void main(String[] args)
  5. {
  6. CashCard[] cards={
  7. new CashCard("A001",500,0),
  8. new CashCard("A002",300,0),
  9. new CashCard("A003",1000,1)
  10. };
  11. Scanner scanner = new Scanner(System.in);
  12. for(CashCard card : cards) {
  13. System.out.printf("为(%s,%d,%d)储值:",card.number,card.balance,card.bonus);
  14. card.store(scanner.nextInt());
  15. System.out.printf("明细(%s,%d,%d)%n",card.number,card.balance,card.bonus);
  16. }
  17. }}

5.2类语法细节

  • public权限修饰

    public是个公开类,可以在其他包的类中使用。可以在构造函数上声明public,这表示其他包中的类可以直接调用这个构造函数。可以在方法上声明public,这表示其他包中的方法可以直接调用这个方法。
  • 构造函数

    在定义类时,可以使用构造函数定义对象建立的初始流程。构造函数是与类名称同名,无须声明返回类型的方法。
  • 方法重载

    代码如下:
  1. class Some
  2. {
  3. void someMethod(int i){
  4. System.out.println("int 版本被调用");
  5. }
  6. void someMethod(Integer integer){
  7. System.out.println("Integer 版本被调用");
  8. }
  9. }
  10. public class OverloadBoxing{
  11. public static void main(String[] args)
  12. {
  13. Some s = new Some();
  14. s.someMethod(1);
  15. }
  16. }

运行结果:

若想调用参数为Integer版本的方法,修改代码如下(要明确指定):

  1. class Some
  2. {
  3. void someMethod(int i)
  4. {
  5. System.out.println("int 版本被调用");
  6. }
  7. void someMethod(Integer integer)
  8. {
  9. System.out.println("Integer 版本被调用");
  10. }
  11. }
  12. public class Overload2
  13. {
  14. public static void main(String[] args)
  15. {
  16. Some s = new Some();
  17. s.someMethod(new Integer(1));
  18. }
  19. }

运行结果:

  • 使用this

    this关键字可以出现在类中任何地方,在构造函数参数与对象数据成员同名时,可用this加以区别。

    代码如下:
  1. class Other{
  2. {
  3. System.out.println("对象初始区块");
  4. }
  5. Other()
  6. {
  7. System.out.println("Other() 构造函数");
  8. }
  9. Other(int o ){
  10. this();
  11. System.out.println("Other(int o ) 构造函数");
  12. }
  13. }
  14. public class ObjectInitialBlock{
  15. public static void main(String[] args){
  16. new Other(1);
  17. }
  18. }

运行结果:

  • static类成员

    1.被声明为static的成员,不会让个别对象拥有,而是属于类,是将类名称作为名称空间。

    2.由于static成员是属于类,而非个别对象。在static方法或区块中不能出现this关键字。

    import static语法代码如下:
  1. import java.util.Scanner;
  2. import static java.lang.System.in;
  3. import static java.lang.System.out;
  4. public class ImportStatic{
  5. public static void main(String[] args)
  6. {
  7. Scanner scanner = new Scanner(in);
  8. out.print("请输入姓名:");
  9. out.printf("%s 你好!%n",scanner.nextLine());
  10. }
  11. }

Git代码托管截图

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

在看书的过程中,作者提到这样的一个例子:

String text1 = "Ja"+"va";

String text2 = "Java";

System.out.println(text == text2);

当时没有继续往下看时,以为会输出false。但答案是true。后来作者通过反编译解释了这个问题。

“+”是链接字符,并不是新产生的字符串。

所以在学习过程中,各程序语言会有细微、重要且不容忽视的特性。在学习程序语言是,不得不慎。

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

为什么有的代码中“输出文字”中带有中文时就会生成乱码,改成英文后就顺利输出。

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

java已经学习了三周,这周编写的代码较多,知识相比前几周也更难了,光靠看书感觉不能完全弄懂,看了视频感觉好一些。看视频后,再继续研究书上的代码,不会的地方记下来,直到理解。这周学习比较吃力,还希望继续努力。对于后面的学习,我希望自己可以更加合理的分配时间。java这门课,只有不断练习实践,才可以提高。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 4500行 30篇 400小时
第一周 200/200 2/2 15/15
第二周 300/500 1/3 25/40
第三周 400/900 1/4 30/70

参考资料

20145201 《Java程序设计》第三周学习总结的更多相关文章

  1. Java程序设计第三周学习总结

    1. 本周学习总结 2. 书面作业 Q1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; ...

  2. 20145201《Java程序设计》第九周学习总结

    20145201 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商则对接口进行操作,开发人员无须接触底层 ...

  3. 20145201 《Java程序设计》第二周学习总结

    20145201 <Java程序设计>第二周学习总结 教材学习内容总结 本周学习了课本第三章内容,即JAVA基础语法. 3.1 类型.变量与运算符 基本类型:在java中基本类型主要可区分 ...

  4. 对于“2017面向对象程序设计(Java)第三周学习总结”存在问题的反馈

    对于“2017面向对象程序设计(Java)第三周学习总结”存在问题的反馈 一:教学中存在的学习问题 “1.由于同学们平时练习不足,上课总是出现跟不上老师的节奏的现象. 2.个别同学上课不认真听讲,打开 ...

  5. 20145201 《Java程序设计》第一周学习总结(修改)

    # 20145201 <Java程序设计>第一周学习总结 ## 教材学习内容总结 万事开头难,终于开始学习了Java.寒假的时候看到老师的要求确实有点慌,但是这周翻开书,从书本知识第一行学 ...

  6. 20145201 《Java程序设计》第一周学习总结

    # 20145201 <Java程序设计>第一周学习总结 ## 教材学习内容总结 万事开头难,终于开始学习了Java.寒假的时候看到老师的要求确实有点慌,但是这周翻开书,从书本知识第一行学 ...

  7. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  8. 20145213《Java程序设计》第二周学习总结

    20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...

  9. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  10. 20145330孙文馨 《Java程序设计》第一周学习总结

    20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...

随机推荐

  1. ChemDraw 15.1 Pro插入阿尔法可以这样做

    在理工科学科学习过程中,大家都会遇到各种希腊字母,而阿尔法(α)又是最常见的一个.最新版本ChemDraw 15.1 Pro的功能更加卓越,在很多功能上都进行了优化,操作更简便.其中,就可以很好的在公 ...

  2. 转载:ResNeXt算法详解

    原文连接:http://blog.csdn.net/u014380165/article/details/71667916, 大神"AI之路”有很多经典的总结,推荐前往..   论文:Agg ...

  3. iOS开发之--Mac终端命令大全

    目录操作 命令名 功能描述 使用举例 mkdir 创建一个目录 mkdir dirname rmdir 删除一个目录 rmdir dirname mvdir 移动或重命名一个目录 mvdir dir1 ...

  4. 【转】Linux下mysql操作

    本文转自:http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/10/18/2216279.html 1.linux下启动mysql的命令:my ...

  5. JS循环语句的理解

    循环语句就是让程序重复性去做某些工作 最常见的就是for循环 那它的写法都有哪些呢? 1.必须要有初始值 2.要有条件判断 3.状态的改变 4.循环体 一定要控制循环多少次结束,否则就变成了死循环,消 ...

  6. 修改yum源为阿里云的

    将Centos的yum源更换为国内的阿里云源 author:headsen chen date:2018-04-28  13:33:41 1.备份  mv /etc/yum.repos.d/CentO ...

  7. [Algorithms] Longest Common Substring

    The Longest Common Substring (LCS) problem is as follows: Given two strings s and t, find the length ...

  8. js实现查询关键词,使其高亮

    今天做了一个功能:在页面上查询关键,使其高亮显示,实现代码如下: css: <style type="text/css"> .highlight { backgroun ...

  9. Kubernetes资源创建yml语法

    前言 在是用kubernetes中,我们对资源的创建大部分都是通过 1 kubelet create -f RESOURCE.yaml 刚开看的时候不免有一些迷茫,看不懂语法,不知道怎么写:今天本文就 ...

  10. submit按钮修改宽高的坑

    近些天对h5非常感兴趣,边工作边学习,虽然比较累,但过得很踏实.每天都要学习一点东西,这样才能对得起自己.好了,废话不多说,进入今天的主题. 今天遇到了一个非常有趣的东西,就是在修改submit按钮的 ...