Java基础

一、安装JDK

   使用Java语言开发程序的第一步就是安装JDK,安装JDK后需要配置系统环境变量。

   配置系统环境变量主要是配置PATH,在PATH后面添加"jdk/bin"目录的完整路径,这样系统才能找到编译和运行Java代码的可执行文件所在路径,我们才能够使用javac命令和java命令。

   对于JDK 5.0以及5.0以后的版本,已经不再需要配置CLASSPATH了。

二、Java基本数据类型

类型 长度 包装类
byte 1 Byte
short 2 Short
int 4 Integer
long 8 Long
float 4 Float
double 8 Double
char  2 Char
boolean Boolean

  Java没有无符号数据类型;

  Java基本数据类型长度在不同的机器上是一致的;

  Java基本数据类型都有对应的包装类,且从JDK5以后,基本类型和包装类可以自动转换 ;

  Java没有定义boolean类型的长度,boolean类型主要用来保存字面值truefalse

三、对Java引用的理解

  在Java中,声明基本数据类型的变量是保存在栈中的;

  声明一个对象变量实际是声明了一个引用,该引用保存在栈中,new一个该类型的对象后,在堆内存中开辟了空间保存对象实体,然后返回堆地址赋给引用,这样就可以通过引用来访问堆空间;

  Java中的引用保存对象实体的地址,相当于指针,但不能像对指针一样对引用做运算;

  Java中调用方法传递参数传递的是对象的引用,因此在方法中可以对对象作出修改。

四、Java中的goto语句

   Java中是没有goto语句的,goto语句也是不建议使用的。但有时候我们想要跳出多层循环,需要goto语句的跳转能力,我们可以使用带标签的break语句。

   break语句只能跳出最内层的循环,带标签的break语句就可以跳出任意层的循环:

   

 1 int i,j;
 2 outer:
 3 for(i = 0; i < 100; i++)
 4 {
 5   inner:
 6   for(j = 0; j < 100; j++)
 7   {
 8     if(i * j > 100)
 9       break outer;  
10   }
11 }

 与goto语句不同的是,带标签的break语句只能配合循环语句使用,不能随意跳转到任意位置,break语句的标签只能声明在循环语句的前面:

1 before:
2 for(int i = 0; i < 100; i++)
3 {
4 
5 } 6 7 System.out.println("after the loop"); 8 end: //end的声明不合法

五、Java数组

  Java中声明一个数组时,实际上也是声明了一个引用,然后使用new运算符在堆中开辟空间保存指定数目的对象,并返回第一个对象的地址赋给引用;

  当new了一个数组之后,数组元素的值就被设置成对应类型的默认值(0,false,null);

  Java中声明一个多维数组时,可以只指定第一维的长度,其他维的长度可以不指定;

  Java中多维数组实际上就是数组的数组,比如对二维数组而言,每行实际上是一个数组,并且每行的数组长度还可以不同,例如:

    int[][] intArray = {

        {1,2,3,4,5},

        {1,2,3,4},

        {1,2,3} 

      }

  Java中通常使用System.arraycopy方法或者Arrays.copyOf方法来拷贝数组内容;

六、常量

  Java中用final来修饰一个常量,常量必须在声明时赋值或者在构造函数中赋值。final通常用来修饰Java基本数据类型表示值只能被赋值一次;

  对应于类对象,通常是靠设计该类为不可变类来达到常量对象的目标,例如String类就是不可变类,String类没有提供任何可以修改String属性的方法。设计一个不可变类,要做好封装工作,不提供setter修改方法,除此之外,还要注意不能包含返回可变类对象的方法。在设计普通类的方法时,也应该尽量做到不返回可变类对象,要返回也是返回clone后的可变类对象,否则封装就不够严密。例如:

   

 1 class People
 2 {
 3    private String name; 
 4    private Date birthday;
 5    
 6    public String getName()
 7    {
 8      return name;
 9    }
10    
11    public Date getBirthday()
12    {
13      return birthday;
14    }
15 }

   虽然在People类中设置birthday属性为private,但是getBirthday方法却是直接返回birthday的引用,而Date类不是一个不可变类,这样,我们仍然可以直接在外部调用getBirthday方法获取birthday之后再修改其属性,这样的类设计是有缺陷的。

   final也可以用来修饰类和方法,final修饰的类表示该类不允许被继承,final修饰的方法表示该方法不允许被子类覆盖。

参考资料 《Java核心技术》

原文地址:https://www.cnblogs.com/jqctop1/p/4647452.html