20145304 Java第三周学习报告
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第三周学习报告的更多相关文章
- 20145304 Java第八周学习报告
20145304<Java程序设计>第八周学习总结 教材学习内容总结 NIO NIO使用频道来衔接数据节点,在处理数据时,NIO可以让你设定缓冲区容量,在缓冲区中对感兴趣的数据区块进行标记 ...
- 20145304 Java第七周学习报告
20145304<Java程序设计>第七周学习总结 教材学习内容总结 1.时间的度量: 格林威治标准时间(GMT)通过观察太阳而得,其正午是太阳抵达天空最高点之时,因地球的公转与自传,会造 ...
- 20145304 Java第六周学习报告
20145304<Java程序设计>第六周学习总结 教材学习内容总结 1.InputStream与OutputStream: 在Java中,输入串流的代表对象为java.io.InputS ...
- 《Linux内核分析》第三周学习报告
<Linux内核分析>第三周学习报告 ——构造一个简单的Linux系统MenuOS 姓名:王玮怡 学号:201351 ...
- 20165210 Java第三周学习总结
20165210 Java第三周学习总结 教材学习内容总结 - 第四章学习总结 编程语言的几个发展阶段: 面向机器语言 面向过程语言 面向对象语言 类: 类声明: class People { ... ...
- JAVA第三周学习总结
20175303 2018-2019-2 <Java程序设计>第三周学习总结 教材学习内容总结 •编程语言的发展分为三个阶段,分别是:面向机器,面向过程,面向对象的语言.Java属于面向对 ...
- JAVA 第三周学习总结
20175308 2018-2019-2 <Java程序设计>第三周学习总结 教材学习内容总结 本周的学习内容为整个第四章的内容,学习中感觉知识点既多又杂,故在总结时尽量选用重要的或高度概 ...
- java第三周学习
这一周学习的是java数组面向对象 数组中存放的数据的类型:既可以是基本数据类型也可以是引用数据类型. 数组的定义方式: 1 数据类型[] 数组名; 2 数据类型 数组名[]; 数组的初始化: 1.静 ...
- 20165221 JAVA第三周学习心得
知识点回顾 类与对象学习总结 类:java作为面向对象型语言具有三个特性:①封装性.②继承性.③多态性.java中类是基本要素,类声明的变量叫对象.在类中定义体的函数题叫方法. 类与程序的基本结构: ...
随机推荐
- ios 拨打电话
1,这种方法,拨打完电话回不到原来的应用,会停留在通讯录里,而且是直接拨打,不弹出提示NSMutableString * str=[[NSMutableString alloc] initWithFo ...
- ASP.NET MVC中的Global.asax文件
1.global.asax文件概述 global.asax这个文件包含全局应用程序事件的事件处理程序.它响应应用程序级别和会话级别事件的代码. 运行时, Global.asax 将被编译成一个动态生成 ...
- WPF样式
<Window x:Class="WpfApplication1.Window1" xmlns="http://schemas.microsoft.com/winf ...
- Python 打开目录与指定文件
Python打开外部文件有很多方法, os.popen打开外部程序,但发现只能打开文件所在目录的文件 os.system可打开外部文件os.system(command) command 要执行的命令 ...
- 图结构练习——判断给定图是否存在合法拓扑序列(dfs算法(第一个代码),邻接矩阵(前两个代码),邻接表(第三个代码))
sdut 2140 图结构练习——判断给定图是否存在合法拓扑序列 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 给定一个有向图 ...
- ereg/eregi报错处理办法
ereg()函数和eregi()函数用法相同,不同之处在与ereg()区分大小写,eregi()不区分大小写 在php5.3以上的版本将不再支持eregi()和ereg()函数 处理办法: 正则函数处 ...
- 连接SQL Server执行SQL语句
public static DataTable GetData() { string Connect = ConfigurationManager.AppSettings["Connecti ...
- python调用系统命令popen、system
python调用Shell脚本,有两种方法:os.system(cmd)或os.popen(cmd),前者返回值是脚本的退出状态码,后者的返回值是脚本执行过程中的输出内容.所以说一般我们认为popen ...
- js中ascii码的转换
今天在把原来用C写的程序移植到javascript上,但是有个地方一直调不通,后来才发现是js奇葩的字符处理出的问题.c中使用的字符处理比如加上一个字符值强制转换一下,在js中就行不通了. 但是js提 ...
- 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 ...