20145219 《Java程序设计》第03周学习总结

教材学习内容总结

基本类型和类类型

  • 基本类型:第三章中讲述的那几种,shortlongintbytedoublecharboolean等这些。
  • 类类型:class类型,把一些基本的类型和方法整合到一起,体现出了类的封装特性,便于实现模块化。

对象和类:使用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.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关键字定义类,在Field.java中定义了两个类,一个是非公开的Clothes类,另一个是公开(public)的Field类(文档中的主文档名必须与公开类名称一致)。Clothes类中定义了colorsize两个变量,叫作定义两个值域成员或定义两个数据对象成员。Clothes sun = new Clothes()为将sun名称参考至新建对象,其中Clothes sun叫作声明参考名称、参考变量或直接叫参考,=是指定,new关键字是建立对象实例。
  • 有几个类就会产生几个.class文档。

函数

  • 函数又称方法,是定义在类中的具有特定功能的一段独立的小程序。

  • 格式:

      修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,...)
    {
    执行语句;
    return 返回值;
    }
  • 返回值类型函数运行后结果的数据类型,return结束函数,返回值返回给调用处,形式参数变量,存储调用函数时传递给函数的实际参数,实际参数传递给形式参数的具体数值。

  • 不用返回值的函数可以用void声明。

  • 程序示例

      class Clothes2
    {
    String color;
    char size;
    Clothes2(String color, char size)
    {
    this.color=color;
    this.size=size;
    }
    } public class Field2
    {
    public static void main(String[] args)
    {
    Clothes2 sun = new Clothes2("red",'S');
    Clothes2 spring = new Clothes2("green",'M');
    System.out.printf("sun(%s,%c)%n",sun.color,sun.size);
    System.out.printf("spring(%s,%c)%n",spring.color,spring.size);
    }
    }

  • this是将这个参数的值指定给这个参数。
  • 注意:函数中可以调用函数,但是不能在函数的内部再定义新函数。

标准类

  • 标准API可以省去撰写程序时重新打造基础的需求,包名为java开头的类表示标准API提供的类。

  • java.util.Scanner取得用户输入

      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.printf("猜数字(0~9):");
    guess = scanner.nextInt();
    }
    while(guess != number); System.out.println("猜中了...XD"); }
    }

  • import java.util.Scanner告诉程序你想偷懒,这样不用每次使用Scanner都输入前面的java.util.nextInt()方法会看看标准输入中有没有下一个字符串,有的话会尝试将之剖析为int型。next()是直接取得上一个字符串,nextLine()是取得用户输入的整行文字。

  • java.math.BigDecimalJava遵守IEEE754浮点数运算,用分数与指数来表示小数,会产生浮点数误差,而java.math.BigDecimal可以解决这一点。

     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); }
    }

  • BigDecimal提供plus()substract()multiply()divide()等方法,可以进行加减乘除等运算。还有equals()可以比较两个BigDecimal实质上是否相等。

      import java.math.BigDecimal;
    
      public class DecimalDemo2
    {
    public static void main(String[] args)
    {
    BigDecimal o1 = new BigDecimal ("0.1");
    BigDecimal o2 = new BigDecimal ("0.1");
    BigDecimal o3 = new BigDecimal ("0.1");
    BigDecimal result = new BigDecimal("0.3");
    if(o1.add(o2).add(o3).equals(result))
    {
    System.out.println("等于0.3");
    }
    else
    {
    System.out.println("不等于0.3");
    } }
    }

打包:使用Long、Integer、Double、Float、Boolean、Byte等类来打包基本类型,将基本类型当作对象操作。J2SE5.0后可以自动装箱、拆箱。

  • 程序示例

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

数组

  • 是同一类型数据的集合,是一个容器。它会自动从0开始编号。

  • 格式:

      元素类型[] 数组名=new 元素类型[元素个数或数组长度];
    元素类型[] 数组名=new 元素类型[]{元素,元素,...};
    元素类型[] 数组名={元素,元素,...};
  • 数组一被定义即有默认初始值。

  • 程序示例

      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循环

      for(int score:scores)
    {
    System.out.printf("学生分数:%d %n",scores);
    }

  • 二维数组

      public class XY
    {
    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("%2d",value);
    }
    System.out.println();
    } }
    }

  • 使用java.util.Arraysfill()方法改变数组的默认初始值

      import java.util.Arrays;
    
      public class Score3
    {
    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);
    }
    }
    }

  • 二维数组也可以是不规则的数组

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

  • 数组复制

    -浅层复制:仅将每个索引处所参考的对象给复制的参考,并没有复制出对象。System.arraycopy()Arrays.copyof()都是执行的浅层复制。

    Arrays.copyof()的第二个参数是新建立的数组长度。

      import java.util.Arrays;
    
      public class CopyArray
    {
    public static void main(String[] args)
    {
    int[] scores1 = {88,81,74,68,78,76,77,85,95,93};
    int[] scores2 = Arrays.copyOf(scores1,scores1.length);
    for(int score : scores2)
    {
    System.out.printf("%3d",score);
    }
    System.out.println(); scores2[0] = 99;
    for(int score : scores1)
    {
    System.out.printf("%3d",score);
    }
    }
    }

`System.arraycopy()`中的五个参数分别是来源数组、来源起始索引、目的数组、目的起始索引、复制长度。

-**深层复制:**连同对象一同复制,必须自行操作。

	class Clothes2
{
String color;
char size;
Clothes2(String color, char size)
{
this.color=color;
this.size=size;
}
} public class DeepCopy
{
public static void main(String[] args)
{
Clothes2[] c1 = {new Clothes2("red",'S'),new Clothes2("green",'M')};
Clothes2[] c2 = new Clothes2[c1.length];
for(int i = 0; i < c1.length; i++)
{
Clothes2 c = new Clothes2(c1[i].color, c1[i].size);
c2[i] = c;
}
c1[0].color = "yellow";
System.out.println(c2[0].color);
}
}

字符串

  • 字符串的本质是打包字符数组的对象,是java.lang.String类的实例。length()是取得字符串长度,charAt()是取得字符串中某个字符,toUpperCase()是将原本小写的字符串内容转为大写的字符串内容。

  • 用户输入程序,求总和

      import java.util.Scanner;
    
      public class Sum
    {
    public static void main(String[] args)
    {
    Scanner scanner = new Scanner(System.in);
    long sum = 0;
    long number = 0;
    do
    {
    System.out.print("input numbers:");
    number = Long.parseLong(scanner.nextLine());
    sum += number;
    }
    while(number != 0);
    System.out.println("sum:"+sum);
    }
    }

  • 用 "" 写下的字符串称为字符串常量,使用 + 连接字符串会产生新的String实例。

封装

  • 不用重复撰写对象初始化流程。构造函数就是在实现对象初始化流程的封装。
  • private定义私有数据类型。

类语法

  • public为公开类,在构造函数上声明public表示其他包中的类可以直接调用这个构造函数,在方法上声明public表示其他包的方法可以直接调用这个方法。
  • 只有编译程序自动加入的构造函数,才成为默认构造函数。如果自行撰写无参数、没有内容的构造函数就不是默认构造函数了。

重载

  • 在同一个类中,允许存在一个以上的同名函数,只要他们的参数个数或者参数类型不同即可。

  • 程序示例

      class Some
    {
    void someMethod(int i)
    {
    System.out.println("int 版本被调用");
    }
    void someMethod(Integer integer)
    {
    System.out.println("Integer 版本被调用");
    }
    }
    public class Overload
    {
    public static void main(String[] args)
    {
    Some s = new Some();
    s.someMethod(1);
    }
    }

this

  • 除了被声明为static的地方外,this关键字可以出现在类中任何地方,在构造函数与对象数据成员同名时,可用this加以区别。

  • 程序示例

      class Other{
    {
    System.out.println("对象初始区块");
    } Other() {
    System.out.println("Other() 构造函数");
    } Other(int o) {
    this();
    System.out.println("Other(int o) 构造函数");
    }
    }
    public class Object {
    public static void main(String[] args){
    new Other(1);
    }
    }

static类成员

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

  • 程序示例

      import java.util.Scanner;
    import static java.lang.System.in;
    import static java.lang.System.out;
    public class ImportStatic
    {
    public static void main(String[] args)
    {
    Scanner scanner = new Scanner(in);
    out.print("请输入姓名:");
    out.printf("%s 你好!%n",scanner.nextLine());
    }
    }

其它

  • 不定长度自变量:使用不定长度自变量时,方法上声明的不定长度参数必须是参数列最后一个。
  • 内部类:在类中再定义类。

传值调用

	public class Call
{
public static void main(String[] args)
{
Customer c1=new Customer("Justin");
some(c1);
System.out.println(c1.name); Customer c2=new Customer("Justin");
other(c2);
System.out.println(c2.name);
}
static void some(Customer c)
{
c.name="Jhon";
} static void other(Customer c)
{
c=new Customer("Bill");
}
} class Customer
{
String name;
Customer(String name)
{
this.name=name;
}
}

完成第一次代码托管

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

问题:书上p148的传值调用程序,我还是不太懂为什c2的名字没有改变?

解决方法:待解决......

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

问题:在编译书上p96的Score程序时,我错将System.out.printf("学生分数:%d %n",scores[i])打成System.out.println("学生分数:%d %n",scores[i]),结果弹出来很多错误。在上一章中书上说System.out.printf是按格式输出,而System.out.println是输出后换行,如果仅仅只是换行的差别的话那为什么用后面一种不行呢?我也有试着将输出中的%n删去 ,但依旧是错的。

解决方法:还没解决......

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

这一周的任务明显比上一周多,上一周的知识和C语言很像,有了大一的基础能够比较快的理解和掌握,但是这一周概念性的东西很多,知识的盲点也就体现出来了,需要静下心来反复读才能明白。这一周最大的收获就是学会了代码托管,而且帮助宿舍的同学完成了第一次代码托管,很有成就感。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 150/150 2/2 15/15 学会搭建Java环境,学会写Hello World小程序
第二周 500/500 3/3 35/35 掌握IDE的使用方法,学会Java的基本语法规则
第三周 900/900 4/4 70/70 学会代码托管,学习了类类型、面向对象、函数等知识

参考资料

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

  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. Ubuntu apt-get update错误解决

    用apt-get命令安装开发软件非常方便,但由于各种原因,经常链接不上软件源,于是需要使用sudo apt-get update命令来更新软件源. 而屋漏偏逢连夜雨,这时候更新命令也罢工,出现各种错误 ...

  2. 【vijos】1763 Wormhole(贪心)

    https://vijos.org/p/1764 首先第一个虫洞一定是建在1号点. 证明如下: 假设一个虫洞在a,一个在b,a<b,那么走到k点的最短距离为 min{|x1-xk|, |x1-x ...

  3. MathType编辑钢筋符号就是这么简单

    很多的用户在使用MathType公式编辑器的时候,发现它所包含的符号非常的多,几乎你在数学中看到的任何符号都能用MathType编辑出来.它能够满足各个学科对符号的需求,除了常规的数学物理符号之外,也 ...

  4. Python_selenium之获取页面上的全部邮箱

    Python_selenium之获取页面上的全部邮箱 一.思路拆分 获取网页(这里以百度的“联系我们”为例),网址http://home.baidu.com/contact.html 获取页面的全部内 ...

  5. Java RSA加密以及验签

    签名加密以及验签工具类: 一般秘钥分为3个key 1.自己生成的私钥, 2.通过私钥生成的公钥1 3.通过提交公钥1给某宝,获取的公钥2. RSA公钥加密算法简介 非对称加密算法.只有短的RSA钥匙才 ...

  6. VS2010程序打包操作(结合图片详细讲解)

     附视频教程:http://www.cnblogs.com/mengdesen/archive/2011/06/14/2080312.html 1.  在vs2010 选择“新建项目”----“其他项 ...

  7. Dropdownlist中用viewmodel传值处理方法

    背景:MVC框架,页面使用razor语法,下拉框的话使用了@Html.DropDownList(),以前传值使用viewdata,但是我们老大说这个方式比较low,希望我可以使用viewmodel的方 ...

  8. ZOJ 3946 Highway Project(Dijkstra)

    Highway Project Time Limit: 2 Seconds      Memory Limit: 65536 KB Edward, the emperor of the Marjar ...

  9. Servlet——总结

    当我们学完了JavaSe部分的知识之后,如果我们往Web方面发展和学习的话,我们将会接触到一个非常重要的web技术——Servlet.在说明Servlet的配置之前我们先来了通过下面的请求响应图解一下 ...

  10. Phonetic Symbols&Rules of Pronunciation

    音标 Phonetic Symbols http://yinbiao.tingclass.net/ 1.1元音 1.1.元音:元音有20个,其中单元音12个,双元音8个. (1)“短”单元音 [i] ...