java基础整理
Java 标识符
Java 的所有的组成部分都要有自己的名称。类、变量和方法的名称称为标识符。
无效的标识符:关键字,以数字开头,除货币字符( $ )或者下划线( _ )以外的其他符号开头
Java 修饰符
修饰符用来定义类、方法或者变量,通常放在语句的最前端
访问控制修饰符 :
default (即默认,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。
private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
public : 对所有类可见。使用对象:类、接口、变量、方法
protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。
非访问修饰符:
static :用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝。 静态变量也被称为类变量。局部变量不能被声明为 static 变量。静态方法不能使用类的非静态变量。静态方法从参数列表得到数据,然后计算这些数据。
final :表示"最后的、最终的"含义,变量一旦赋值后,不能被重新赋值。被 final 修饰的实例变量必须显式指定初始值。
The final field Test.value cannot be assigned
abstract :抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充。
一个类不能同时被 abstract 和 final 修饰。如果一个类包含抽象方法,那么该类一定要声明为抽象类,否则将出现编译错误。
抽象类可以包含抽象方法和非抽象方法。
如果一个类包含若干个抽象方法,那么该类必须声明为抽象类。抽象类可以不包含抽象方法。
strictfp:关键字可应用于类、接口或方法。使用 strictfp 关键字声明一个方法时,该方法中所有的float和double表达式都严格遵守FP-strict的限制,符合IEEE-754规范。当对一个类或接口使用 strictfp 关键字时,该类中的所有代码,包括嵌套类型中的初始设定值和代码,都将严格地进行计算。严格约束意味着所有表达式的结果都必须是 IEEE 754 算法对操作数预期的结果,以单精度和双精度格式表示。
如果你想让你的浮点运算更加精确,而且不会因为不同的硬件平台所执行的结果不一致的话,可以用关键字strictfp.
Java 变量
变量可以给我们提供我们程序可以操纵的命名的存储。Java 中的每种变量都有特定的类型,这决定了变量的大小
和它的设计占用内存空间;这一些列的值可以存储在那个内存空间中;变量可以应用的操作。
在使用前你必须现将所要使用的变量进行声明。声明变量的基本格式如下:
data type variable [ = value][, variable [= value] …] ;
本地变量(局部变量)
局部变量声明在方法、构造方法或者语句块中;
局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁;
访问修饰符不能用于局部变量;
局部变量只在声明它的方法、构造方法或者语句块中可见;
局部变量是在栈上分配的。
局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。
实例变量
• 实例变量在类中声明,但是它在方法、构造器或者块外。
• 当堆中的对象被分配了一个空间时,每个实例变量的位置就被创建了。
• 当对象采用关键字“ new ”创建时实例变量就被创建了,当对象被销毁时它也就被销毁了。
• 实例变量的值必须被一个以上的方法、构造器或者块,或者类中必须出现的对象的状态的重要部分所引用。
• 实例变量可以在类水平上在使用前或者使用后声明。
• 实例变量可以用可访问描述符。
• 实例变量对类中的所有方法、构造器或者块可见。一般来讲,推荐将这些变量私有(访问层面)。然而子类
的可见性可用可访问描述符给予那些变量。
• 实例变量有默认值。数字的默认值为零,布尔型默认值为假,对象引用默认值为空。在声明或者构造器内可
以进行赋值。
• 实例变量可以采用直接在类中叫名字方式访问。然而在静态方法和不同的类(实例变量可以被访问)中应当
使用完全限定名称。ObjectReference.VariableName
类、静态变量
类变量也称为静态变量,在类中以 static 关键字声明,但必须在方法之外。
无论一个类创建了多少个对象,类只拥有类变量的一份拷贝。
静态变量除了被声明为常量外很少使用。常量是指声明为public/private,final和static类型的变量。常量初始化后不可改变。
静态变量储存在静态存储区。经常被声明为常量,很少单独使用static声明变量。
静态变量在第一次被访问时创建,在程序结束时销毁。
与实例变量具有相似的可见性。但为了对类的使用者可见,大多数静态变量声明为public类型。
默认值和实例变量相似。数值型变量默认值是0,布尔型默认值是false,引用类型默认值是null。变量的值可以在声明的时候指定,也可以在构造方法中指定。此外,静态变量还可以在静态语句块中初始化。
静态变量可以通过:ClassName.VariableName的方式访问。
类变量被声明为public static final类型时,类变量名称一般建议使用大写字母。如果静态变量不是public和final类型,其命名方式与实例变量以及局部变量的命名方式一致。
Java 数组
要使用一个程序的数组,必须声明一个变量来引用数组,必须指定数组的变量可以引用的类型。下面是来声明一
个数组变量的语法:
dataType[] arrayRefVar; // preferred way.
or
dataType arrayRefVar[]; // works but not preferred way.
JDK 1.5 引入了一个新的 for 循环被称为 foreach 循环或增强的 for 循环,它无需使用一个索引变量来完整的遍
历数组。
Arrays 类:
java.util.Arrays 类能方便地操作数组,它提供的所有方法都是静态的。
具有以下功能:
给数组赋值:通过 fill 方法。
对数组排序:通过 sort 方法,按升序。
比较数组:通过 equals 方法比较数组中元素值是否相等。
查找数组元素:通过 binarySearch 方法能对排序好的数组进行二分查找法操作。
Java 枚举值
枚举是在 Java5.0 版本中被引进的。枚举限制了变量要有一些预先定义的值。枚举列表中的值称为枚举值。
运用枚举值可以大大减少你的代码中的漏洞。
举例来说,如果我们想为一家鲜榨果汁店编个程序,就可以将杯子的尺寸限制为小中和大。这样就可以确保人们
不会定大中小尺寸之外的了。
Java 关键字
以下是一些关键字:
abstract assert boolean break
byte case catch char
class const continue default
do double else enum
extends final finally float
for goto if implements
import instanceof int interface
long native new package
private protected public return
short static strictfp super
switch synchronized this throw
throws transient try void
volatile while
Java 中的注释
Java 像 C 和 C++ 一样支持单行或多行注释。所有注释中的字母都会被 Java 编译器忽略。
public class MyFirstJavaProgram{
/* This is my first java program.
- This will print ‘Hello World’ as the output
- This is an example of multi-line comments.
/
public static void main(String []args){
// This is an example of single line comment
/ This is also an example of single line comment. */
System.out.println(“Hello World”);
} }
使用空行
一行只有空格的行可能是注释,这样的行叫做空行,Java 会完全忽略它。
继承
继承可以被定义为一个对象获取另一个对象属性的过程。使用继承可以使信息以继承顺序有序管理。
当我们谈论起继承,最常用的关键字应该为 extends 和 implements。 这些关键字将决定一个对象是否是 A 类
型或是其他类型。通过使用这些关键字,我们可以使一个对象获得另一个对象的属性。
继承需要符合的关系是:is-a,父类更通用,子类更具体
需要注意的是 Java 不支持多继承,但支持多重继承。
公共父类:
public class Animal {
private String name;
private int id;
public Animal(String myName, int myid) {
name = myName;
id = myid;
}
public void eat(){
System.out.println(name+“正在吃”);
}
public void sleep(){
System.out.println(name+“正在睡”);
}
public void introduction() {
System.out.println(“大家好!我是” + id + “号” + name + “.”);
}
}
企鹅类:
public class Penguin extends Animal {
public Penguin(String myName, int myid) {
super(myName, myid);
}
}
老鼠类:
public class Mouse extends Animal {
public Mouse(String myName, int myid) {
super(myName, myid);
}
}
在 Java 中类可以从类中产生。简单来说,如果你想要创建一个新类并且现在已经存在一个包含你所需要代码的
类,那么就有可能从这些存在的代码创建你的类。
这个概念可以使你在没有在新类中重写代码的情况下重复利用文件和方法。在这种情况下已经存在的类叫做超
类,后来产生的类叫做子类。
接口
接口是抽象方法的集合。如果一个类实现了一个接口,那么就需要继承这个接口中的所有抽象方法。
接口不是类。写一个接口和写一个类很相似,但是它们是两个不同的概念。类是描述一个对象的成员属性和行
为。接口只包含一个类所实现的行为。
除非实现了接口的类是抽象的,否则接口中的所有方法都需要在类中实现。
在以下方面,接口和类非常相似: - 一个接口可以包含任意数量的方法。 - 一个接口以 .java 的扩展名写入文
件中,并且接口的名字与文件名相同。 - 接口的字节码位于一个 .class 文件中。 - 接口位于包中,并且相应的
字节码文件必须在和该包名匹配的文件夹结构下。
然而,在以下方面,接口和类是不同的: - 不能实例化一个接口。 - 接口不能包含构造方法。 - 接口中的所有方法都
是抽象的。 - 接口不能包含实例变量。接口中唯一能出现的变量必须被同时声明为 static 和 final 。 - 接口不能
被类继承;它应该被类实现。 - 一个接口可以继承多个接口。