最近学习Java有了一些小收获,不成体系,在此记录。

1.Eclipse的源码体系结构

这里只提最基础的,毕竟刚开始学习。

首先需要新建一个Java project,一个project中可能会有多个package,包中是源码,也就是以.java结尾的文档,这其中就是类。一个.java的文档中可以有多个类,但是只能有一个公共类,且公共类的名字要与文档名相同。一个包中可以有多个.java的文档。


2.一个包中可以有多个.java的文档,而且每个都可以有一个main方法。


3.Java的数据类型分为两大类,包括基础数据类型和引用类型。

基础数据类型就是常说的八种,byte,short,int,long等等,但是要注意的是,Java不像C++那样没有严格指定数据的长度,而是规定死了,不需要为硬件平台的兼容担心。

注意,Boolean类型的不允许用数字转换,只有true和false。


4.类是对象的抽象。

1
2
3
4
class Clothes {
String color;
char size;
}

声明一个类,然后就可以让类为模板创建对象。

1
Clothes c1 = new Clothes();

注意,这里分两步。在堆上先new一个Clothes对象,然后将c1这个“门牌号”参考到新的对象/实例上。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Clothes2{
String color;
char size;
Clothes2(String color,char size){ //构造函数
this.color = color;
this.size = size;
}
}

public class Field2{
public static void main(String[] args){
Clothes2 sun = nes Clothes2("red",'S');
Clothes2 spring = nes Clothes2("green",'M');

System.out.printf("sun (%s, %c)%n",sun.color,sun.size);
System.out.printf("green (%s, %c)%n",green.color,green.size);
}
}

关于构造函数,我还没深入了解。


5。关于java.util.BigDecimal

在程序中,基本数据类型数字总是不能精确表示,但是可以使用BigDecimal类。

BigDecimal类提供了许多操作数字的方法,具体参考API文档。

1
2
3
4
5
6
7
8
9
10
import java.math.BigDecimal;

public class DecimalDemo{
public staic void main(String[] args){
BigDecimal operand1 = new BigDecimal("1.0");
BigDecimal operand2 = new BigDecimal("0.8");
BigDecimal result = operand1.subtract(operand2);
Syatem.out.println(result); //结果为0.2
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.math.BigDecimal;

public class DecimalDemo{
public staic void main(String[] args){
BigDecimal operand1 = new BigDecimal("0.1");
BigDecimal operand2 = new BigDecimal("0.1");
BigDecimal operand3 = new BigDecimal("0.1");
BigDecimal result = new BigDecimal("0.3");
if(operand1.add(operand2).add(operand3).equals(result)){
System.out.println("等于0.3");
}else{
System.out.println("不等于0.3");
}
}
}

结果是等于!

1
2
3
BigDecimal operand1 = new BigDecimal("0.1");
BigDecimal operand2 = new BigDecimal("0.1");
System.out.println(operand1==operand2);

这将显示false!

问题在于,=一般是用于指定参考名称参考到某个对象,意思是,operand1这个名字参考到BigDecimal("0.1"),一个堆内存空间(BigDecimal("0.1"))的标签。而==的意思是比较两个参考的对象是否是同一个,不是比较内容的值,也可以换个理解方式,operand1这个标签的值就是BigDecimal("0.1"),这种说法很不严谨。这里创建了两个对象,具有不同的标签,虽然他们的属性(“0.1”)是一样的。如果要比较内含值,则这样:operand1.equals(operand2).


6.基本类型打包器

在Java中一切都是对象,出来基本数据类型,这是为了效率留下来的,但是有的时候我们想依据这些基本数据类型打包一些操作(方法)给它,这样它就成为了对象。这里需要用到基本类型打包器。

它的用处简单说就是把基本数据变成对象,使其可以带有方法。有Long,Integer,Double,Float,Byte等。

1
2
3
4
5
6
7
8
9
10
11
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.doubleValue(wrapper2));
}
}

打包器可以自动装箱也可以自动拆箱:

1
2
Integer wrapper=10;//自动装箱,把一个int的数字自动转换为Integer类型的对象
int foo=wrapper;//自动拆箱,把一个Integer类的对象拆开