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

代码托管图:

参考资料

20145304 Java第三周学习报告的更多相关文章

  1. 20145304 Java第八周学习报告

    20145304<Java程序设计>第八周学习总结 教材学习内容总结 NIO NIO使用频道来衔接数据节点,在处理数据时,NIO可以让你设定缓冲区容量,在缓冲区中对感兴趣的数据区块进行标记 ...

  2. 20145304 Java第七周学习报告

    20145304<Java程序设计>第七周学习总结 教材学习内容总结 1.时间的度量: 格林威治标准时间(GMT)通过观察太阳而得,其正午是太阳抵达天空最高点之时,因地球的公转与自传,会造 ...

  3. 20145304 Java第六周学习报告

    20145304<Java程序设计>第六周学习总结 教材学习内容总结 1.InputStream与OutputStream: 在Java中,输入串流的代表对象为java.io.InputS ...

  4. 《Linux内核分析》第三周学习报告

    <Linux内核分析>第三周学习报告                                    ——构造一个简单的Linux系统MenuOS 姓名:王玮怡  学号:201351 ...

  5. 20165210 Java第三周学习总结

    20165210 Java第三周学习总结 教材学习内容总结 - 第四章学习总结 编程语言的几个发展阶段: 面向机器语言 面向过程语言 面向对象语言 类: 类声明: class People { ... ...

  6. JAVA第三周学习总结

    20175303 2018-2019-2 <Java程序设计>第三周学习总结 教材学习内容总结 •编程语言的发展分为三个阶段,分别是:面向机器,面向过程,面向对象的语言.Java属于面向对 ...

  7. JAVA 第三周学习总结

    20175308 2018-2019-2 <Java程序设计>第三周学习总结 教材学习内容总结 本周的学习内容为整个第四章的内容,学习中感觉知识点既多又杂,故在总结时尽量选用重要的或高度概 ...

  8. java第三周学习

    这一周学习的是java数组面向对象 数组中存放的数据的类型:既可以是基本数据类型也可以是引用数据类型. 数组的定义方式: 1 数据类型[] 数组名; 2 数据类型 数组名[]; 数组的初始化: 1.静 ...

  9. 20165221 JAVA第三周学习心得

    知识点回顾 类与对象学习总结 类:java作为面向对象型语言具有三个特性:①封装性.②继承性.③多态性.java中类是基本要素,类声明的变量叫对象.在类中定义体的函数题叫方法. 类与程序的基本结构: ...

随机推荐

  1. ios 拨打电话

    1,这种方法,拨打完电话回不到原来的应用,会停留在通讯录里,而且是直接拨打,不弹出提示NSMutableString * str=[[NSMutableString alloc] initWithFo ...

  2. ASP.NET MVC中的Global.asax文件

    1.global.asax文件概述 global.asax这个文件包含全局应用程序事件的事件处理程序.它响应应用程序级别和会话级别事件的代码. 运行时, Global.asax 将被编译成一个动态生成 ...

  3. WPF样式

    <Window x:Class="WpfApplication1.Window1" xmlns="http://schemas.microsoft.com/winf ...

  4. Python 打开目录与指定文件

    Python打开外部文件有很多方法, os.popen打开外部程序,但发现只能打开文件所在目录的文件 os.system可打开外部文件os.system(command) command 要执行的命令 ...

  5. 图结构练习——判断给定图是否存在合法拓扑序列(dfs算法(第一个代码),邻接矩阵(前两个代码),邻接表(第三个代码))

    sdut 2140 图结构练习——判断给定图是否存在合法拓扑序列 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述  给定一个有向图 ...

  6. ereg/eregi报错处理办法

    ereg()函数和eregi()函数用法相同,不同之处在与ereg()区分大小写,eregi()不区分大小写 在php5.3以上的版本将不再支持eregi()和ereg()函数 处理办法: 正则函数处 ...

  7. 连接SQL Server执行SQL语句

    public static DataTable GetData() { string Connect = ConfigurationManager.AppSettings["Connecti ...

  8. python调用系统命令popen、system

    python调用Shell脚本,有两种方法:os.system(cmd)或os.popen(cmd),前者返回值是脚本的退出状态码,后者的返回值是脚本执行过程中的输出内容.所以说一般我们认为popen ...

  9. js中ascii码的转换

    今天在把原来用C写的程序移植到javascript上,但是有个地方一直调不通,后来才发现是js奇葩的字符处理出的问题.c中使用的字符处理比如加上一个字符值强制转换一下,在js中就行不通了. 但是js提 ...

  10. How to use Ajax on Visualforce page on Salesforce platform

    Just use Ajax pattern to call object data from server on visualforce page. Following is the Asynchro ...