20155326刘美岑2016-2017-2《Java程序设计》第三周学习总结

教材学习内容总结

基本类型和类类型

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

对象和类

  • 使用Java撰写程序几乎都在使用对象,要产生对象必须先定义类,类是对象的设计图,对象是类的实例。

定义类

  • 类定义时使用class关键词,建立实例要使用new关键词。引用书上例子:衣服的型号与颜色

  • 代码和运行结果如下:

  • 程序示例

        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文档。

使用标准类:

  • 标准API可以省去撰写程序时重新打造基础的需求,包名为java开头的类表示标准API提供的类。
  • java.util.Scanner取得用户输入

    (1)、使用java.util.Scanner,将字符转化为整数。
  • 代码和运行结果如下:

//使用标准类
package cc.openhome;
import java.util.Scanner; public class Guess {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);//建立Scanner实例
int number=(int)(Math.random()*10);
int guess; do {
System.out.print("猜数字(0~9):");
guess = scanner.nextInt();//取得下一个整数
}while(guess!=number);
System.out.println("猜中了...XD");
}
}

结果截图:

  • 在java中,当通过newScanner(System.in)创建一个Scanner,控制台会一直等待输入,直到敲回车键结束,把所输入的内容传给Scanner,作为扫描对象。Scanner对每个基本类型,都会有个对应的nextxxx()方法,如果直接取得上一个字符串(以空格或换行分隔),则使用next(),如果想取得用户输入的整行文字,则使用nextLine()(以换行分隔)

    (2)、使用java.math.BigDecimal,得到更好的精确度。
  • 代码和运行结果如下:

  • 创建BigDecimal的方法之一是使用字符串,BigDecimal在创建时会剖析传入字符串,以默认精度进行接下来的运算。BigDecimal提供有plus()、subtract()、multiply()、divide()等方法,可以进行加减乘除等运算,这些方法都会返回代表运算结果的BigDecimal。

对象指定与相等性

  • 当用于基本类型时,=是将值复制给变量,==是比较两个变量存储的值是否相同。
  • 当用于类类型时,=是用在指定参考名称参考某个对象,==是用在比较两个参考名称是否参考同一对象。
  • 代码和运行结果如下:

package cc.openhome; import java.math.BigDecimal; public class Compare { public static void main(String[] args) { BigDecimal a=new BigDecimal("0.1"); BigDecimal b=new BigDecimal("0.1"); BigDecimal c=a; System.out.println(a==b); System.out.println(a==c); System.out.println(a.equals(b)); } }

  • 程序中使用a==b,就是在问,a名牌绑的对象是否就是b名牌绑的对象?答案“不是”。程序中使用a.equals(b),就是在问,a名牌绑的对象与b名牌绑的对象,实际上内涵值是否相同,答案“是”。

基本类型打包

  • 基本类型打包器主要目的是将基本类型打包在对象之中,就像是将基本类型当作对象操作。

    基本类型打包器都是归类于java.lang包中。

    Integer提供compareTo()方法,可与另一个Integer对象进行比较,如果打包值相同就返回0,小于就返回-1,大于就返回1。

    可用Number类来自动装箱。

    null代表一个特殊对象,任何类声明的参考名称都可以参考至null,表示该名称没有参考至任何对象实体。
  • 代码和运行结果如下:
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(wrapper1.compareTo(wrapper2));
}
}

数组

  • 数组打印:数组就像是一个有很多小隔间的容器,每个小隔间可以放入一个元素,例如在数组中存入六个数字,并打印出来

  • 代码和运行结果如下:


//不规则二维数组 package cc.openhome; public class IrregularArray { public static void main(String[] args) {
int[][] arr=new int[2][];//声明arr参考的对象会有两个索引
arr[0]=new int[]{1,2,3,4,5};//arr[0]是长度为5 的一维数组,想在new数组中一并指定初始值,不必指定数组长度。
arr[1]=new int[]{1,2,3};//arr[1]是长度为3的一维数组。
for(int[] row:arr){
for(int value:row){
System.out.printf("%2d",value);
}
System.out.println();
}
} }

  • 数组复制:System.arraycopy()的五个参数分别是来源数组、来源起始索引、目的数组、目的起始索引、复制长度。Arrays.copyOf()可以建立新数组,第二个参数是指定建立的新数组长度。

  • 代码和运行结果如下:


package cc.openhome; 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;//不影响score1参考的数组对象
for(int score:scores1){
System.out.printf("%3d",score);
}
System.out.println();
for(int score:scores2){
System.out.printf("%3d",score);
}
}
}

  • 浅层复制:仅将每个索引处所参考的对象给复制的参考,并没有复制出对象。
  • 深层复制:连同对象一同复制,必须自行操作。

字符串对象:

  • 由字符组成的文字符号称为字符串。由于在java中是对象,所以可以使用length()取得字符串长度,使用charAt()指定取得字符串中某个字符,索引从0开始,使用toUpperCase将原本小写的字符串内容转为大写的字符串内容。字符串的本质是打包字符数组的对象,是java.lang.String类的实例。length()是取得字符串长度,charAt()是取得字符串中某个字符,toUpperCase()是将原本小写的字符串内容转为大写的字符串内容。用 "" 写下的字符串称为字符串常量,使用 + 连接字符串会产生新的String实例。以""包括的字符串,只要内容相同(序列、大小写相同),无论在程序代码中出现几次,JVM都只会建立一个String实例,并在字符串池中维护。

    用""写下的字符串称为字符串常量。

  • 代码和运行结果如下:


package cc.openhome; 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("输入数字: ");
number=Long.parseLong(scanner.nextLine());
sum+=number;
}while(number!=0);
System.out.println("总和:"+sum);
}
}

封装

  • 封装可以理解为把方法封在类中,用打时候可以直接拿,就好比你要上学,类就是书包而方法就是书,要用方法打时候直接从书包中拿书就行。
  • 代码和运行结果如下:

package cc.openhome; class CashCard{ String number;
int balance;
int bonus;
CashCard(String number,int balance,int bonus){
this.number=number;
this.balance=balance;
this.bonus=bonus;
}
} public class CardApp { public static void main(String[] args) {
CashCard[] cards={
new CashCard("A001",500,0),
new CashCard("A002",300,0),
new CashCard("A003",1000,1),
new CashCard("A004",2000,2),
new CashCard("A005",3000,3) };
for(CashCard card:cards){
System.out.printf("(%s,%d,%d)%n",card.number,card.balance,card.bonus);
}
}
}

函数

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

  • 构造函数时若要将某参数的值指定给同名参数时,要使用this表示。

    代码如下:

  • 格式:

      修饰符 返回值类型 函数名(参数类型 形式参数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);
}
}

打包

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

数组

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

    元素类型[] 数组名=new 元素类型[元素个数或数组长度];

    元素类型[] 数组名=new 元素类型[]{元素,元素,...};

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

增强式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();
} }
}

static类:

被声明为static的成员,不会让个别对象拥有,而是属于类,被声明为static的方法,是将类名称作为名称空间,可以通过类名称和"."运算符来调用static。

由于static成员是属于类,而非个别对象,所以在static成员中使用this,会是一种语意上的错误。

静态变量必须在初始化之前进行赋值,否则会报错。静态方法通常都是被经常使用的方法,不需要每次都重新实例化,提高工作效率。

  • 代码和运行结果如下:

package cc.openhome;//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());
}
}

不定长度自变量、内部类与传值调用:

  • 类中定义类,称为内部类。可以定义在类区块中。

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

    Java中只有传值调用。

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

课本上的代码敲上去之后在终端却运行不了,出现了下图中的错误。但是在IDEA中却可以运行。

代码托管

  • 代码提交过程截图:

  • 代码量截图:

上周考试错题总结

  • CH03 判断: Java中, 数字235.00的类型是float. (X)
  • CH03 填空:~0b1011的十进制值是(-12)

    这道题老师在课后讲了两遍,涉及到负数的补码反码,听了以后会做了。
  • CH03 判断:System.out.printf("%b", 11)的输出结果是0b1011 (X)
  • 这道题是因为没有好好看书,%b输出的只可能是true或false。
  • CH03 填空 :0x10%9 的结果是( 7 )
  • CH03 填空 :0x10&9 的结果是(0)这两道题是运算题,由于之前没仔细看书所以不知道怎么做,在室友的友情教导下知道怎么做了
  • CH03 填空:编译p60 Comparison.java的命令为(javc –d xxx Comparison.java )

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 20篇 400小时
第一周 20/20 1/1 20/20 安装了各种程序
第二周 106/126 1/2 25/45 掌握了托管代码
第三周 197/200 1/3 30/30 大体了解java的对象和对象封装

20155326刘美岑2016-2017-2《Java程序设计》第三周学习总结的更多相关文章

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

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

  2. 20155326刘美岑 2016-2017-2 《Java程序设计》第5周学习总结

    20155326刘美岑 2016-2017-2 <Java程序设计>第5周学习总结 教材学习内容总结 使用 try.catch (1)java中所有的错误都会被打包为对象,如果愿意,可以尝 ...

  3. 20155326刘美岑 2016-2017-2 《Java程序设计》第二周学习总结

    20155326刘美岑 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 教材第三章主要讲解的是基础语法,主要包括认识类型与变量.学习运算符的基本使用.了解类型 ...

  4. 20155326刘美岑2016-2017-2《Java程序设计》第一周学习总结

    20155326刘美岑 2006-2007-2 <Java程序设计>第1周学习总结 教材学习内容总结 在老师的要求下我看了这门课的考察方式.这门课和以前上的课有些差别,成绩是由平时一点一点 ...

  5. 20155326刘美岑 Exp6 信息收集与漏洞扫描

    20155326刘美岑 Exp6 信息收集与漏洞扫描 实验后回答的问题 (1)哪些组织负责DNS,IP的管理. 全球根服务器均由美国政府授权的ICANN统一管理,负责全球的域名根服务器.DNS和IP地 ...

  6. 20155326刘美岑 《网络对抗》Exp2 后门原理与实践

    20155326刘美岑 <网络对抗>Exp2 后门原理与实践 实验内容 (1)使用netcat获取主机操作Shell,cron启动 (2)使用socat获取主机操作Shell, 任务计划启 ...

  7. 20155326刘美岑 《网络对抗》Exp1 PC平台逆向破解

    20155326刘美岑 <网络对抗>逆向及Bof基础实践 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函 ...

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

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

  9. 20155326 2016-2017-2 《Java程序设计》第九周学习总结

    20155326 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 1.撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找. 2.JDBC目的 ...

随机推荐

  1. HTML JavaScript语法练习

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. N! (大数,优化)

    Problem Description 输出N的阶乘.(注意时间限制150ms&&注意不能打表后输出) 打表的定义:在本地主机预先计算出了每个值对应的答案,并把输入和输出的映射直接写入 ...

  3. 探索未知种族之osg类生物---呼吸分解之advance

    回顾 我们用了两节的内容才堪堪讲解完ViewerBase::frame()函数中调用的realize()---Viewer:: realize()函数.我们简单的总结就是Viewer:: realiz ...

  4. Luogu 3424 [POI2005]SUM-Fibonacci Sums

    Solution 没有任何算法, 只要会$for$ 就能AC... 我们观察到, 如果有一个位置 的$F_i$ 的系数$b_i$ 为2, 那么只需要把 $b_{i-2}+1,b_{i+1}+1$即可. ...

  5. Ubuntu12.04(64bit)下安装Qt4总结

    本文主要介绍linux系统Ubuntu12.04(64bit)下Qt4.8.5的安装,其中还涉及Fedora9下Qt4的安装. 1.下载软件:去Qt的官网下载Qt4.8.5和Qt Creator软件, ...

  6. linux-ubuntu 下R无法安装rjava模块的原因及解决方案

    错误信息: 没有 /usr/lib/jvm/default-java/jre/bin/java 原因: R找不到java作为依赖 解决方案: (1) 如果你没有安装java,请先安装java. (2) ...

  7. 3DES加密及.NET弱密钥处理

    背景 智能pos机开发项目需要指定Key加密某些关键字符串.商定采用3DES加密算法. 实践 网海中很多.NET C#编写3DES加密的函数.采集一段简明.成熟的代码,归置于常用程序集.但当指定Key ...

  8. SpringMVC学习笔记:单例与并发问题

    Spring中的Bean默认都是单例(singleton),Spring中Bean的scope属性有五种类型: singleton 表示在spring容器中的单例,通过spring容器获得该bean时 ...

  9. Windows AD域管理软件是什么?

    Windows AD域管理软件是什么? ADManager Plus是一个简单易用的Windows AD域管理工具,帮助域管理员简化日常的管理工作.通过直观友好的操作界面,可以执行复杂的管理操作,比如 ...

  10. python学习 day21 (3月28日)----(抽象类 多态 nametuple dump)

    不要因为走的路太久了,而忘记了为了什么而出发. 提前作准备了吗?把思维导图的东西做了吗? 和工作了几年的人,相比,是不是相同的水平,如果要写简历的话. 一边学习,一边复习. 小就是大,少就是多. 1. ...