目录
- 20189230杨 2018-2019-2 《移动平台开发实践》第3周学习总结
- 学习《Java和Android开发学习指南(第二版)》第5、6、8、9章——
- 教材学习中的问题和解决过程
- 代码调试中的问题和解决过程
- [代码托管]
- statistics.sh脚本运行结果的截图
- 上周考试错题总结
- 学习进度条
- 参考资料
20189230杨 2018-2019-2 《移动平台开发实践》第3周学习总结
学习《Java和Android开发学习指南(第二版)》第5、6、8、9章——
第5章核心类
5.1java.lang.Object
1.java.lang.Object类表示一个Java对象。实际上,所有的类都直接或间接地派生自这个类。
5.2java.lang.String
1.java.lang.String是最常使用的一个类,并且绝对也是最重要的类之一。一个String对象是常量,一旦创建了,不能修改其值。
2.通常将一个字符串字面值赋值给一个String引用变量,而非用关键字构建一个String引用变量。
5.2.1比较两个字符串
1.使用==操作符比较两个String对象s1和s2。若相同,(s1==s2)计算为true;若不同,(s1==s2)计算为false。
5.2.2字符串的字面值
1.可以使用加号把两个字符串字面值连接起来:“”+“”;也可以将一个String和一个基本数据类型或其他的对象连接起来:“”+3
5.2.6String类的方法
1.valueOf方法将一个基本类型、一个字符数组或Object的一个实例转换为一个字符串表示。例如,如下的代码返回字符串“23”:String.valueOf(23)。
2.Format方法允许你传递任意数目的参数。要指定一个参数,使用%s表示法,表示数组中的下一个参数。例如,如下是对printf方法的一次方法调用:
String firstName=“John”;
String Lastname=“Adams”;
System.out.format(“First name: %s. Last name: %s”,
firstName,lastName);
5.3 java.lang.StringBuffer和java.lang.StringBuilder
1.String对象是不可变的。最好使用java.lang.StringBuffer和java.lang.StringBuilder类。一旦完成了对字符串的操作,可以将一个StringBuffer或StringBuilder对象转换为一个String对象。StringBuffer类是为了可变的字符串而单独使用的,方法同步,适合在多线程环境中使用。StringBuilder是StringBuffer的异步版本。
5.5java.lang.Class
1.代码清单5.1 ClassDemo类
package app05;
public class ClassDemo{
public static void main(String[] args){
String country="Fiji";
Class myClass=country.getClass();
System.out.println(myClass.getName());
Class klass=null;
try{
klass=Class.forName("app05.Test");
}catch(ClassNotFoundException e){
}
if(klass!=null){
try{
Test test=(Test) klass.newInstance();
test.print();
}catch (IllegalAccessException e){
}catch (InstantiationException e){
}
}
}
}
5.6 java.lang.System
1.System类的三个字段是out、in和err:
out字段表示标准的输出流;
err字段也表示一个PrintStream对象,默认情况下,输出也会从当前调用Java程序的地方通向控制台。其目的是显示那些应该立即引起用户注意的错误消息;
in字段表示输入标准流。
2.代码清单5.2 InputDemo类
public class Employee{
public int age;
public double salary;
public Employee(){
}
public Employee(int ageValue, double salaryValue){
age=ageValue;
salary=salaryValue;
}
}
5.7 java.util.Scanner
1.可以使用Scanner来获取键盘输入,在实例上调用next方法。next方法会缓存用户从键盘或其他设备输入的字符。
2.代码清单5.3 使用Scanner来接受用户输入
package app05;
import java.util.Scanner;
public class ScannerDemo{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
while(true){
System.out.print("What's your name?");
String input=scanner.nextLine();
if(input.isEmpty()){
break;
}
System.out.println("Your name is"+input+".");
}
scanner.close();
System.out.println("Good bye");
}
}
第6章 数组
6.1 概览
1.每次创建一个数组,在后台,编译器都要创建一个对象以允许:
(1)通过length字段来获取数组中的元素的数目。
(2)通过指定一个索引来访问每一个元素。
一个数组是一个Java对象。
6.5 查找一个数组
1.代码清单6.1 一个二分查找的示例
package app06;
import java.util.Arrays;
public class BinarySearchDemo{
public static void main(String[] args){
int[] primes={2,3,5,7,11,13,17,19};
int index=Arrays.binarySearch(primes,13);
System.out.println(index);
index=Arrays.binarySearch(primes,4);
System.out.println(index);
}
}
代码清单6.1中的BinarySearchDemo类使用了一个int类型的数组,它包含了前8个素数。传入13作为查找键,将会返回5,因为13是该数组中的第6个元素,其索引为5.传入4作为查找键,将会找不到匹配,该方法返回-3.这是-2减去1的结果。如果要将该键插入到数组中的话,它本应该插入到索引2的位置。
6.6 给main方法传入一个字符串数组
1.代码清单6.2 访问main方法的参数
package app06;
public class MainMethodTest{
public static void main(String[] args){
for (String arg:args){
System.out.println(arg);
}
}
}
6.7 多维数组
1.代码清单6.3 一个多维数组
package app06;
import java.util.Arrays;
public class MultidimensionalDemo{
public static void main(String[] args){
int[][] matrix=new int[2][3];
for(int i=0;i<2;i++){
for(int j=0;j<3;j++){
matrix[i][j]=j+i;
}
}
for(int i=0;i<2;i++){
System.out.println(Arrays.toString(matrix[i]));
}
}
}
第8章错误处理
8.1 捕获异常
1.try通常和catch和finally使用。错误处理的步骤可以概括如下:
(1)将可能导致一个错误的代码隔离到一个try语句块中。
(2)对于每一个单个的catch语句块,编写出如果try语句块中发生特定类型的一个异常,将要执行的代码。
(3)在finally语句块中,编写出不管是否发生错误都将运行的代码。
2.代码清单8.1 NumberDoubler类
package app08;
import java.util.Scanner;
public class NumberDoubler{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
String input=scanner.next();
try{
double number=Double.parseDouble(input);
System.out.printf("Result:%s",number);
}catch(NumberFormatException e){
System.out.println("Invalid input.");
}
scanner.close();
}
}
[](https://img2018.cnblogs.com/blog/1607929/201903/1607929-20190316113255047-589450971.png
第9章 操作数字
9.1 装箱和拆箱
1.将一个基本类型转换为一个包装类对象,称为装箱(boxing);从一个包装类对象转换为基本类型,称为拆箱(unboxing)。
装箱——
Integer number=3;//assign an int to Integer
拆箱——
Integer number=new Integer(100);
int simpleNumber=number;
9.2 数字解析
1.数字解析的目的是将一个字符串转换为一个数字基本类型。如果解析失败,例如,由于字符串不是一个数字或者是一个超出了指定范围的数字,程序将会抛出一个异常。
2.代码清单9.1 解析数字(NumberTest.java)
package app09;
import java.util.Scanner;
public class NumberTest{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
String userInput=scanner.next();
try{
int i=Integer.parseInt(userInput);
System.out.println("The number entered:"+i);
}catch(NumberFormatException e){
System.out.println("Invalid user input");
}
}
}
9.3 数字格式化
1.代码清单9.2 NumberFormatTest类
package app09;
import java.text.NumberFormat;
import java.util.Locale;
public class NumberFormatTest{
public static void main(String[] args){
NumberFormat nf=NumberFormat.getInstance(Locale.US);
System.out.println(nf.getClass().getName());
System.out.println(nf.format(123445));
}
}
9.6 计算货币
1.float和double都不适合于计算货币。
2.代码清单9.3 使用BigDecimal
package app09;
import java.math.BigDecimal;
public class BigDecimalDemo{
public static void main (String[] args){
double balance=9.99;
balance-=0.10F;
System.out.println(balance);
BigDecimal balance2=BigDecimal.valueOf(9.99);
BigDecimal accountFee=BigDecimal.valueOf(.1);
BigDecimal r=balance2.subtract(accountFee);
System.out.println(r.doubleValue());
}
}
9.7 生成随机数
1.代码清单9.4 随机数生成器
package app09;
public class RandomNumberGenerator{
public int generate(){
double random=Math.random();
return(int)(random*10);
}
public static void main(String[] args){
RandomNumberGenerator generator=
new RandomNumberGenerator();
for(int i=0;i<10;i++){
System.out.println(generator.generate());
}
}
}
教材学习中的问题和解决过程
- 问题:对Java中错误和异常的部分知识掌握不清
- 问题解决方案:在网上查找相关资料并学习总结:
Java把异常当作对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类。在Java API中已经定义了许多异常类,这些异常类分为两大类,错误Error和异常Exception。Java异常层次结构图如下图所示:
从图中可以看出所有异常类型都是内置类Throwable的子类,因而Throwable在异常类的层次结构的顶层。
接下来Throwable分成了两个不同的分支,一个分支是Error,它表示不希望被程序捕获或者是程序无法处理的错误。另一个分支是Exception,它表示用户程序可能捕捉的异常情况或者说是程序可以处理的异常。其中异常类Exception又分为运行时异常(RuntimeException)和非运行时异常。
Java异常又可以分为不受检查异常(Unchecked Exception)和检查异常(Checked Exception)。
Error:Error类对象由 Java 虚拟机生成并抛出,大多数错误与代码编写者所执行的操作无关。例如,Java虚拟机运行错误(Virtual MachineError),当JVM不再有继续执行操作所需的内存资源时,将出现 OutOfMemoryError。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止;还有发生在虚拟机试图执行应用时,如类定义错误(NoClassDefFoundError)、链接错误(LinkageError)。这些错误是不可查的,因为它们在应用程序的控制和处理能力之外,而且绝大多数是程序运行时不允许出现的状况。对于设计合理的应用程序来说,即使确实发生了错误,本质上也不应该试图去处理它所引起的异常状况。在Java中,错误通常是使用Error的子类描述。
Exception:在Exception分支中有一个重要的子类RuntimeException(运行时异常),该类型的异常自动为你所编写的程序定义ArrayIndexOutOfBoundsException(数组下标越界)、NullPointerException(空指针异常)、ArithmeticException(算术异常)、MissingResourceException(丢失资源)、ClassNotFoundException(找不到类)等异常,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生;而RuntimeException之外的异常我们统称为非运行时异常,类型上属于Exception类及其子类,从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常。
Error和Exception的区别:Error通常是灾难性的致命的错误,是程序无法控制和处理的,当出现这些异常时,Java虚拟机(JVM)一般会选择终止线程;Exception通常情况下是可以被程序处理的,并且在程序中应该尽可能的去处理这些异常。
代码调试中的问题和解决过程
- 问题1:不会使用JDB调试Java程序
问题1解决方案:
Linux Bash下调试代码:在相应文件夹下选择在终端打开——用vim生成HelloJDB.java——直接javac -g -d HelloJDB.java——java HelloJDB
调试基础——
方法断点:stop in HelloJDB.main;stop at HelloJDB:12
行断点:stop in HelloJDB.main-run-locals-step(next)-locals-print i-print j-list
条件断点:
临时断点:
使用:jdb -classpath .:./bin HelloJDB 调试程序;JDB不支持条件断点和临时断点
实例:类的调试-递归学习
- 问题2:不会连接数据库
[代码托管]
https://gitee.com/EvelynYang/20189230/tree/master/src
statistics.sh脚本运行结果的截图
上周考试错题总结
- 11.如果有以下程序片段:
public class Some{
private Some some;
private Some(){}
public static Some create(){
if(some=null){
some = new Some():
}
return some;
}
}
以下描述正确的是
A .编译失败
B .客户端必须new Some()产生Some实例
C .客户端必须new Some.create()产生Some实例
D .客户端必须Some.create()产生Some实例
正确答案: D 我的答案: A - 15.如果有以下程序片段:
public class Some{
public int x;
public Some(int x){
this.x=x;
}
}
以下描述正确的是
A .new Some(10)创建对象后,对象成员x值为10
B .new Some(10)创建对象后,对象成员x值为0
C .Some s = new Some(10)后,可使用s.x取值
D .编译失败
正确答案: A 我的答案: D
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 1/3 | 18/38 | |
第三周 | 500/1000 | 1/4 | 38/76 |
参考资料
- 使用码云和博客园学习简易教程
- Intellj IDEA 简易教程
- 使用JDB调试Java程序
- 积极主动敲代码,使用JUnit学习Java
- 进度条和学习过程可视化