20145207 java第二周学习总结
教材学习内容总结
这部分可能要扒一些课本而上的东西了。在第三章中,知道了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!”
20145207 java第二周学习总结的更多相关文章
- 20165210 Java第二周学习总结
20165210 Java第二周学习总结 教材学习内容总结 - 第二章学习总结 标识符与关键字: 重点在50个关键字 标识符并不能是关键字 标识符的第一个字符不能是数字字符 Unicode字符集简单了 ...
- 201521123093 java 第二周学习总结
201521123093 <java程序设计> 第二周学习总结 一.第二周学习总结 答:(1)关于进一步使用码云管理代码,本周才真正学会了如何将Eclipse里的代码上传到码云中,并且能够 ...
- 20165326 java第二周学习笔记
学习笔记 一.理论学习 基本数据类型与数组 标识符的第一个字符不能是数字:标识符不能为关键字. 基本数据类型多数与c语言相同.重点如下: 1.逻辑类型boolean赋值true/false 2.浮点数 ...
- JAVA 第二周学习总结
20175308 2018-2019-2 <Java程序设计>第二周学习总结 教材学习内容总结: 第二章学习内容: 1.认识标识符与关键字 2.java的八种数据类型,着重记好精度由高到低 ...
- JaVa第二周学习总结
第一周学习的时候上传图片用的是网站外链然后导致出现了极为尴尬的情形...然后我就把第一周的全改成本地上传了. 首先列出所做任务 1 安装IDEA 2学习二三章视频,课本 3调试代码,上传码云 4总结问 ...
- 201521123122 Java 第二周学习总结
1. 本周学习总结 1.进一步了解了对码云的使用,学会了将本地代码上传到码云以及将码云上的代码克隆到eclipse上. 2.感觉本章学的基本语法和c的基本上差不多啊 3.string的对象创建后无法修 ...
- 20165221 JAVA第二周学习心得及体会
基本数据类型与数组理论学习 根据第二章的网课链接,归纳出以下板块: 知识框架 标识符与关键字 1.标识符 其本质是文件名字 标识符的第一个字符不能为数字,标识符不能为关键字(如inter) 标识符不能 ...
- java第二周学习日记
day01 1.抽象类 (1)抽象类的应用场景: 我们在描述一类事物的时候,发现该种事物确实存在着某种行为,但是这种行为目前不是具体的,那么我们可以抽取这种行为的声明,但是不去实现该种行为,这时候这种 ...
- 2016221 Java第二周学习补充
对switch语句的理解 在程序中遇到switch时,要将switch后的表达式与后续程序中的case常量进行比较,如若相等,程序将执行后面所有的case语句,直到遇到break 为止.如果走完整个程 ...
随机推荐
- Angular组件之间通讯
组件之间会有下列3种关系: 1. 父子关系 2. 兄弟关系 3. 没有直接关系 通常采用下列方式处理(某些方式是框架特有)组件间的通讯,如下: 1父子组件之间的交互(@Input/@Output/模板 ...
- 组合数取模方法总结(Lucas定理介绍)
1.当n,m都很小的时候可以利用杨辉三角直接求. C(n,m)=C(n-1,m)+C(n-1,m-1): 2.n和m较大,但是p为素数的时候 Lucas定理是用来求 c(n,m) mod p,p为素数 ...
- 【OpenCV新手教程之十五】水漫金山:OpenCV漫水填充算法(Floodfill)
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/28261997 作者:毛星云( ...
- php redis中文手册
phpredis是php的一个扩展,效率是相当高有链表排序功能,对创建内存级的模块业务关系 很有用;以下是redis官方提供的命令使用技巧: 下载地址如下: https://github.com/ow ...
- linq项目中例子实例
在mvc项目中 var ls = (from i in gt.vendor_login join j in gt.vendor on i.vendor_id equa ...
- 使用Jwt为.Net Core SignalR保驾护航
前言 SignalR Demo搭建起来之后,是没有相应的认证和授权功能的.于是乎,参考官方文档实现了相应的逻辑. 简单认证 首先使用稍微简单的方式实现.添加如下代码: services.AddAuth ...
- Spring(四)之Bean生命周期、BeanPost处理
一.Bean 生命周期 Spring bean的生命周期很容易理解.当bean被实例化时,可能需要执行一些初始化以使其进入可用状态.类似地,当不再需要bean并从容器中移除bean时,可能需要进行一些 ...
- PAT——1054. 求平均值
本题的基本要求非常简单:给定N个实数,计算它们的平均值.但复杂的是有些输入数据可能是非法的.一个“合法”的输入是[-1000,1000]区间内的实数,并且最多精确到小数点后2位.当你计算平均值的时候, ...
- Java I/O系列(一)InputStream与OutputStream源码分析及理解
1. InputStream 定义 字节输入流,是一个抽象类,核心是通过read()方法,从数据源中读取一个个字节出来,另有skip,mark功能 核心源码理解 源码: public abstract ...
- maven多模块部署(转载)
[Maven]使用Maven构建多模块项目 Maven多模块项目 Maven多模块项目,适用于一些比较大的项目,通过合理的模块拆分,实现代码的复用,便于维护和管理.尤其是一些开源框架,也是采用多模块的 ...