教材学习内容总结

在第三章中,知道了Java可区分为基本类型和类类型两大类型系统,其中类类型也称为参考类型。在这一周主要学习了类类型。
对象(Object):存在的具体实体,具有明确的状态和行为
类(Class):具有相同属性和行为的一组对象的集合,用于组合各个对象所共有操作和属性的一种机制。
简单来说,类是对象的设计图,对象是类的实例。

要深刻理解对象的含义,例如Clothes c1 = new Clothes()c1是引用在栈上的,new clothes()在堆上生成对象

Java遵守IEEE754浮点数运算规范,使用分数与指数来表示浮点数,这样就导致无法精确表示,从而造成运算上的误差,比如1.0-0.8的结果就不是0.2。因此如果要求精确度,那就要小心使用浮点数,不能用==直接比较浮点数运算结果,所以可以使用Java.math.BigDecimal类以获得更好的精确度。

基本类型打包器

打包基本类型:基本类型long、int、double、float、boolean等,在J2SE5.0之前必须亲自使用Long、Integer、Double、Float、Boolean等类打包为对象,才能当做对象来操作。

== 与 equals的区别
equals()是逻辑上的相等,相比较字符串实际字符内容是否相同,用equals()
==表示的是这个类产生的2个对象是否是同一个对象,如果是同一个对象,那么==的返回值才是true,否则为false。
在Java中为了考虑效率,“”中完全相同的字符串,无论在程序代码中出现几次,JVM都会建立一个String实例放在字符串池中

数组对象

数组在Java中就是对象,索引由0开始,如果存取超过索引范围,

int []arr = new int[2];
System.out.println(arr[3]);

就会抛出ArrayIndexOutOfBoundsException数组脚标越界异常的错误

int[] arr =null;
System.out.println(arr[0]);

arr引用没有指向实体,却在操作实体中的元素时,会抛出NullPointerException空指针异常的错误

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

声明二维数组来储存XY坐标位置要放的值。暂时将二维数组看成矩阵就容易理解一点
格式1:元素类型[] 数组名 =new 元素类型[元素个数或者数组长度];
例如 int[] arr = new int[5];
格式2:元素类型[] 数组名 = new元素类型[] {元素,元素...}
int[] arr= new int[]{3,5,1,7};
int[] arr= {3,5,1,7};

栈内存:用于存通储局部变量,当数据使用完,所占用的空间会放在堆内存中。
堆内存:数组和对象,通过new新建的实例都会放在堆内存
每一个实体都有内存地址值
实体中的变量都有默认初始化值

无论System.arraycopy()还是Arrays.copyOf(),用在类类型声明的数组时,都是执行浅层复制。
想要深层复制的话

class Clothes2
{
String color;
char size;
Clothes2(String color, char size)
{
    this.color=color;
    this.size=size;
}
}

public class DeepCopy
{
public static void main(String[] args)
{
        Clothes2[] c1 = {new Clothes2("red",'S'),new Clothes2("green",'M')};
    Clothes2[] c2 = new Clothes2[c1.length];
    for(int i = 0; i < c1.length; i++)
    {
        Clothes2 c = new Clothes2(c1[i].color, c1[i].size);
        c2[i] = c;
    }
    c1[0].color = "yellow";
    System.out.println(c2[0].color);
}
} 

需要自行复制元素,将对象中的每个元素都由c1复制到c2.

字符串对象

字符串本质是打包字符数组的对象,是java.lang.String类的实例
不可变动字符串:在java中,字符串对象一旦建立,就无法更改对象中任何内容,对象上没有任何方法可以更改字符串内容。可以使用 + 连接字符串,改用StringBuilder来改善。它的特点在于每次调用完后都会返回原有的StringBuilder对象,这样可以避免产生多个对象。

由1+2+...+100 可以用for

public class Sum1{
    public static void main(String[] args){
        for(int i=1; i<101; i++){
            System.out.print(i);
            if(i!=100){
                System.oyt.print('+');
            }
        }

用StringBuilder改善

public class OneTo100
{
public static void main(String[] args)
{
StringBuilder builder = new StringBuilder();
for(int i = 1; i < 100; i++)
{
    builder.append(i).append('+');
}
System.out.println(builder.append(100).toString());
}
} 

只产生一个StringBuilder对象,只进行一次输出,效果更好。

查询Java API文件

如果我们想用某一个类的某一功能,但不知道如何调用,或者想了解一下某一个类具体有哪种功能等内容,需要查询Java API文件。
在Windows系统下,可以下载CHM格式的Java API,然后具体过程可以参照教材,离线查询十分方便。

对象封装

封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
封装原则:将不需要对外提供的内容都隐藏起来,吧属性都隐藏起来,提供公共方法对其访问。

private(私有)关键字
是一个权限修饰符,用于修饰成员(成员变量和成员函数),被私有化的成员只在本类中有效。

关于构造函数
函数名与类名称相同。无须声明返回类型。创建对象时,数据成员就会初始化,如果没有初始指定值,则会使用默认值初始化。不可以写return语句。
作用:给对象进行初始化。

使用this关键字
当在函数内需要用到调用该函数的对象时,就用this。
this代表其所在函数所属随想的引用。
例如:this.number= number;

static(静态)关键字
static关键字用于修饰成员(成员变量和成员函数)。使用时需注意静态方法只能访问静态成员,静态方法中不可以写this,super关键字,主函数必须是静态的。
在JDK5后可以使用Import 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());
}
}

教材学习中的问题和解决过程

书中代码

Integer i =10;
System.out.println(i+10);
System.out.println(i++);

认为会显示20和11,正确应该是20和10。10会先装箱,然后在i+10时会先对i进行拆箱,再进行加法运算;i++该行也是先对i拆箱再进行递增运算。递增是最后的操作,只有在输出后才会递增的。

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

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.printf("GUESS A NUMBER:");
    guess = scanner.nextInt();
}
while(guess != number);

System.out.println("YOU ARE RIGHT!");

}
} 

import java.util.Scanner使用import告诉编译程序想偷懒 如果没有就会出现编译错误,除非每次都输入java.util.Scanner。在创建Scanner实例时使用System.in输入。
刚开始不太理解其中一些代码函数,查阅资料才知道Math.random()是令系统随机选取大于等于 0.0 且小于 1.0 的伪随机double值,*10并强制转换成int型,可以生成1~10的随机整数。而guess = scanner.nextInt();要求猜出这个整数,直至猜对会显示“YOU ARE RIGHT!”

书中109的代码不太理解

public class Average{
    public static void main(String[] args){
        long sum=0;
        for(String arg : args){
            sum +=Long.parseLong(arg);
        }
        System.out.println("平均:"+(float) sum/ args.length);
    }
}

出现了NaN,Not a Number。NaN 用于处理计算中出现的错误情况。代码中没有输入,所以没有办法计算出所有整数的平均。

其他(感悟、思考等,可选)

随着书上敲过的代码越来越多,对一些编译错误也有了更深刻的认识。很累,也很有收获,实践出真知。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 4000行 16篇 400小时
第一周 200/200 2/2 20/20
第二周 200/400 1/3 25/45
第三周 500/900 1/4 40/85



参考资料

20145232 韩文浩 《Java程序设计》第3周学习总结的更多相关文章

  1. 《Java程序设计》第二周学习总结

    20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...

  2. 20155213 2016-2017-2 《Java程序设计》第二周学习总结

    20155213 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 关于Unicode和UTF 很抱歉,没能读完娄老师推荐的网址,关于Unicode和UTF的介 ...

  3. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  4. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  5. 20145330孙文馨 《Java程序设计》第一周学习总结

    20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...

  6. 20145337 《Java程序设计》第九周学习总结

    20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...

  7. 《Java程序设计》第九周学习总结

    20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...

  8. 20145236 《Java程序设计》第九周学习总结

    20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...

  9. 学号 20175212 《Java程序设计》第九周学习总结

    学号 20175212 <Java程序设计>第九周学习总结 教材学习内容总结 一.MySQL数据库管理系统 1.在官网上下载并安装MySQL 2.在IDEA中输入测试代码Connectio ...

  10. 20165223《JAVA程序设计》第二周学习总结

    20165223 <JAVA程序设计>第二周学习总结 教材学习内容总结 第二章要点 标识符与关键字 基本数据类型 类型转换运算 输入输出数据 数组 第三章要点 运算符与表达式 语句概述 i ...

随机推荐

  1. 谷歌开发的draco格式文件将obj文件压缩成drc文件后将大大减小文件大小(threejs加载有mtl文件的drc文件)

    问题描述:当前threejs是92版本 但是当前版本还没有能够直接加载带贴图文件的drc格式的loader: 解决办法:先加载mtl文件将obj文件分解(按照mtl文件内材质贴图信息进行分解)再将分解 ...

  2. sql like 语句

    a like '%b%'的意思是,在a中找类似b的字符,在检索以逗号分隔的字段中时,两次弄反了顺序,比如,在a字段中查找有没有类似‘2,3’的记录,应该这么写:','+'2,3' like '%,'+ ...

  3. Django——模板语言相关内容

    Django模板语言相关内容   Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{  }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 {{ 变量名 }} ...

  4. 函数的有用信息,装饰器 day12

    一 函数的有用信息 本函数的功能:绘图功能,实时接收数据并绘图.:return: 绘图需要的数据,返回给前端某标签 def f1(): ''' 本函数的功能:绘图功能,实时接收数据并绘图. :retu ...

  5. Vue 进度条 和 图片的动态更改

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  6. python 创建一次性,快速的小型web服务

  7. 10.22JS日记

    1.js数据类型分析 (1)基础类型:string.number.boolean.null.undefined (2)引用类型:object-->json.array... 2.点运算  xxx ...

  8. Oracle性能优化1-总体思路和误区

    最近在看梁敬彬老师关于Oracle性能优化的一些案例,在这里做一些简单的总结 1.COUNT(*)与COUNT(列)哪个更快 drop table t purge; create table t as ...

  9. snort帮助文档

    [1] CentOS6.6下基于snort+barnyard2+base的入侵检测系统的搭建 2 基于Snort的C_S模式的IDS的设计与应用_王会霞.caj [3] Snort 笔记1 - 3种模 ...

  10. 使用limma、Glimma和edgeR,RNA-seq数据分析易如反掌

    使用limma.Glimma和edgeR,RNA-seq数据分析易如反掌 Charity Law1, Monther Alhamdoosh2, Shian Su3, Xueyi Dong3, Luyi ...