20145304 Java第三周学习报告
2016-03-20 10:47
519 查看
20145304 《Java程序设计》第三周学习总结
教材学习内容总结
1.定义类:
类定义时使用class关键词,建立实例要使用
new关键词。
代码如下:
/*定义类 书上例子 衣服的型号与颜色 */ package cc.openhome; import java.sql.SQLOutput; class Clothes{//定义类 String color; char size; } public class Field { public static void main(String[] args) { Clothes sun=new Clothes(); Clothes spring=new Clothes();//建立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); } }
结果截图:
构造函数时若要将某参数的值指定给同名参数时,要使用this表示。
代码如下:
/*构造函数 书上例题 */ package cc.openhome; class Clothes2{ String color; char size; Clothes2(String color,char size){ //定义构造函数 this.color=color;//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); } }
结果截图:
2.使用标准类:
使用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); 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.math.BigDecimal,得到更好的精确度。
BigDecimal提供有
plus()、
substract()、
multiply()、
divide()等方法,可以进行加、减、乘、除等运算,这些方法都会返回代表运算结果的
BigDecimal。
代码如下:
/* 用equals()进行比较 */ package cc.openhome; import java.math.BigDecimal; public class DecimalDemo { public static void main(String[] args) { BigDecimal op1=new BigDecimal("0.1"); BigDecimal op2=new BigDecimal("0.1"); BigDecimal op3=new BigDecimal("0.1"); BigDecimal result=new BigDecimal("0.3"); if(op1.add(op2).add(op3).equals(result)){ System.out.println("等于0.3"); } else{ System.out.println("不等于0.3"); } } }
结果截图:
3.对象指定与相等性:
基本类型:"="是指将值复制给变量,
"=="是比较两个变量存储的值是否相同。
类类型:
"="是用在指定参考名称参考某个对象,
"=="是用在比较两个参考名称是否参考同一对象。
代码如下:
/* 标准类 对象指定与相等性 书上例题 */ 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)); } }
结果截图:
4.基本类型打包:
基本类型打包器主要目的是将基本类型打包在对象之中,就像是将基本类型当作对象操作。基本类型打包器都是归类于
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)); } }
结果截图:
5.数组:
二维不规则数组:代码如下:
//不规则二维数组 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()可以建立新数组,第二个参数是指定建立的新数组长度。
无论是
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;//为什么不影响啊??哦 for(int score:scores1){ System.out.printf("%3d",score); } System.out.println(); for(int score:scores2){ System.out.printf("%3d",score); } } }
结果截图:
6.字符串对象:
length()取得字符串长度,使用
charAt()指定取得字符串中某个字符,索引从0开始,使用
toUpperCase将原本小写的字符串内容转为大写的字符串内容。
Java中也可
+运算来连接字符串。
以
""包括的字符串,只要内容相同(序列、大小写相同),无论在程序代码中出现几次,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); } }
结果截图:
7.封装:
在类中定义方法,如果不用返回值,方法名称前可以声明void,方法若有返回值,必须在方法前声明返回值类型。函数与this应用:
代码如下:
//封装对象初始流程 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); } } }
结果截图:
没有定义任何权限关键字时,就是包权限。
在Java中有private、protected与public三个权限修饰。
构造函数与类名称同名,无须声明返回类型的方法。
如果定义类时,没有撰写任何构造函数,编译程序会自动加入一个无参数、内容为空的构造函数。
可以定义多个构造函数,只要参数类型或个数不同,这称为重载构造函数。
封装的目的是主要是隐藏对象细节,不让用户私自篡改。Java中可用
private封装对象私有数据成员。
代码如下:
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 Card { 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); } } }
结果截图:
8.static类:
被声明为static的成员,不会让个别对象拥有,而是属于类。被声明为static的方法,也是将类名称作为名称空间,可以通过类名称和"."运算符来调用static。
代码如下:
//static应用 package cc.openhome; 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()); } }
结果截图:
9.不定长度自变量、内部类与传值调用:
类中定义类,称为内部类。可以定义在类区块中。要使用不定长度自变量,声明参数列时要在类型关键字后加上
...,方法上声明的不定长度参数必须是参数列最后一个。
Java中只有传值调用。
代码如下:
package cc.openhome; public class CallByValue { 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="John"; } static void other(Customer c){ c=new Customer("Bill"); } } class Customer{ String name; Customer(String name){ this.name=name; } }
结果截图:
教材学习中的问题和解决过程
在学习标准类时,不理解书上列举的标准类是什么类。解决过程:学习查询Java API文件,上百度搜索。
在学习P105页的代码时,对于代码中不影响score1的参考数组对象不太理解。
解决办法:改写了程序,将所有数据输出,对比差距。
不太理解书上P129页的代码。
解决过程:将代码敲了一遍,但运行不出来,觉得少了public,仔细阅读教材,发现其只是修改了一个函数,放入原程序后,得出结果。
代码调试中的问题和解决过程
在使用标准类java.math.BigDecimal时,代码完成后,出现如图错误。解决过程:仔细查看代码,发现使用equals()时,少写了s。
使用标准类java.util.Scanner时,调试书上代码,代码无错误,但无法显示结果,如图:
解决过程:需要自行输入数字。
其他(感悟、思考等,可选)
这周几乎将书上四五章的代码敲了一遍,解决了一些调试中出现的错误,大都是单词漏打了一个字母,或是理解错误,没有调试出结果。今后在写代码是要细心,尽量少出现此类错误。对IDEA的使用也更加熟练,能掌握一些常用的简略写法,再用Tab键使其显示全部,节约了大量时间。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 15篇 | 400小时 | |
第一周 | 30/30 | 1/2 | 20/20 | |
第二周 | 50/80 | 1/3 | 10/30 | |
第三周 | 130/210 | 1/4 | 30/60 | |
第四周 | 0/0 | 0/0 | 0/0 |
参考资料
Java学习笔记(第8版)《Java学习笔记(第8版)》学习指导
相关文章推荐
- NetBeans中正则表达式替换实例
- Eclipse设置合适的字体
- eclipse根据.wsdl文件自动生成webservice的调用客户端
- java.io.Serializable的作用
- java项目命名规范
- Java批量处理数据
- JAVA循环遍历Map的几种方法
- 使用Spring-MVC框架生成验证码
- java学习之集合---浅析HashMap
- java 序列化
- Java内存模型 详解
- 20145326 《Java程序设计》第3周学习总结
- Spring整合Hibernate详细步骤
- Java 类初始化顺序
- UML与Java-- UNL类图于Java的基本实现
- 关于一些基础的Java问题的解答(六)
- 《Thinking in Java》第三篇笔记 Java中的static关键字解析
- IT忍者神龟之Java调用net的webservice故障排除实战分享
- java实现导出excel表格
- Spring.Net实现IOC和DI