文章目录
一、修饰符
Java语言提供了很多修饰符,主要分为以下两类:
- 访问修饰符
- 非访问修饰符
1.访问控制修饰符
Java支持4种不同的访问权限:
- default(即默认,什么也不写):在同一个包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。
- private:在同一个类中可见。使用对象:变量、方法。注意:不能修饰类(外部类)
- public:对所有类可见。使用对象:类、接口、变量、方法。
- protected:对同一包内的类和所有子类可见。使用对象:变量、方法。注意:不能修饰类(外部类)。
修饰符 | 当前类 | 同一包内 | 子孙类(同一包) | 子孙类(不同包) | 其他包 |
---|---|---|---|---|---|
public | Y | Y | Y | Y | Y |
protected | Y | Y | Y | Y/N* | N |
default | Y | Y | Y | N | N |
private | Y | N | N | N | N |
*受保护的访问修饰符-protected
- 子类与基类在同一包中:被声明为protected的变量、方法和构造器能被同一个包中的任何其它类访问;
- 子类与基类不在同一包中:在子类中,子类实例可以访问其从基类继承而来的protected方法,而不能访问基类实例的protected方法。
protected可以修饰数据成员,构造方法,方法成员,不能修饰类(内部类除外)。
2.非访问修饰符
- static修饰符,用来修饰方法和类变量。
- 静态变量:static关键字用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只拷贝一份。静态变量也称之为类变量。局部变量不能被声明为static变量。
- 静态方法:static关键字用来声明独立于对象的静态方法。静态方法不能使用类的非静态变量。静态方法从参数列表得到数据。
- final修饰符,用来修饰类,方法和变量,final修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。
- final变量:final表示"最后的、最终的"含义,变量一旦赋值后,不能被重新赋值。被final修饰的实例变量必须显式指定初始值。*final修饰符通常和static修饰符一起使用来创建类常量。
- final方法:父类中的final方法可以被子类继承,但不能被子类重写。
- final类:final类不能被继承,没有类能够继承final类的任何特性。
- abstract修饰符,用来创建抽象类和抽象方法。
- 抽象类:抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充。*一个类不能同时被abstract和final修饰。如果一个类包含抽象方法,那么该类必须声明为抽象类。抽象类可以包含抽象方法和非抽象方法。
- 抽象方法:抽象方法是一种没有任何实现的方法,该方法的具体实现由子类一提供。 *抽象方法不能被声明成final和static。任何继承抽象类的子类必须实现父类的所有抽象方法,除非该子类也是抽象类。抽象方法的声明以分号(;)结尾。
- synchronized和volatile修饰符,主要用于线程的编程。
- synchronized关键字声明的方法同一时间只能被一个线程访问。synchronized修饰符可以应用于四个访问修饰符
- volatile修饰的成员变量在每次线程访问时,都强制从共享内存中重新读取该成员变量的值。而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。 一个volatile对象的引用可能是null。
二、运算符
自增(++)自减(–)运算符
1、前缀自增自减法(++a,–a):先进行自增或者自减运算,再进行表达式运算。
2、后缀自增自减法(a++,a–):先进行表达式运算,再进行自增或者自减运算。
实例:理解 -->“a = a++”等效于“ int b = a++;a=b;”
条件运算符( ? : )
条件运算符也称为三元运算符。
variable x = (expression) ? value if true : value if false
instanceof运算符
该运算符用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)。
三、Number & Math &Character 类
Java Math类
Java的Math包含了用于执行基本数学运算的属性和方法,如初等指数、对数、平方根…
Math的方法都被定义为static形式,通过Math可以在主函数中直接调用。
Java Charcter类
Character类用于对单个字符进行操作。Character类在对象中包装一个基本类型的char的值。
四、String类
1.创建字符串
String创建的字符串存储在公共池中,而new创建的字符串对象在堆上:
String s1 = "Runoob"; // String 直接创建
String s2 = "Runoob"; // String 直接创建
String s3 = s1; // 相同引用
String s4 = new String("Runoob"); // String 对象创建
String s5 = new String("Runoob"); // String 对象创建
2.字符串长度
String类的一个访问器方法是length()方法,它返回字符串对象包含的字符数。
3.连接字符串
可以对字符串常量使用concat()方法:string1.concat(string2);
更常用的是使用’+'操作符来连接字符串。
五、StringBuffer和StringBuilder
当对字符串进行修改的时候,需要使用StringBuffer和StringBuilder类。
和String类不同的是,Stringbuffer和StringBuilder类的对象能够被多次的修改,并且不产生新的未使用对象。
在使用StringBuffer类时,每次都会对StringBuffer对象本身进行操作,而不是生成新的对象,所以如果需要对字符串进行修改推荐使用StringBuffer。
StringBuilder类在Java5中被提出,它和StringBuffer之间的最大不同在于StringBuilder的方法不是线程安全的(不能同步访问)。
六、数组
1.声明数组变量
dataType[] arrayRefVar; // 首选的方法
或
dataType arrayRefVar[]; // 效果相同,但不是首选方法
2.创建数组
Java语言使用new操作符来创建数组:
arrayRefVar = new dataType[arraySize];
数组变量的声明,和创建数组可以用一条语句完成:
dataType[ ] arrayRefVar = new dataType[arraySize];
或
dataType[ ] arrayRefVar = {value0,value1,…,values};
3.处理数组
数组的元素类型和数组的大小都是确定的,所以当处理数组元素的时候,我们通常使用基本循环或者for-each循环。
数组可以作为参数传递给方法。
数组作为函数的返回值。
4.多维数组
多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组:
type[ ][ ] typeName = new type[ typeLength1 ][ typeLength2 ];
5.Arrays类
java.util.Arrays类能方便地操作数组,它提供的所有方法都是静态的。
具有以下功能:
- 给数组赋值:通过fill方法。
- 对数组排序:通过sort方法,按升序。
- 比较数组:通过equals方法比较数组中元素值是否相等。
- 查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法操作。
七、日期时间
java.util包提供了Date类来封装当前的日期和时间。Date类提供两个构造函数来实例化Date对象。
第一个构造函数使用当前日期和时间来初始化对象。
Date( )
第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数。
Date( long millisec )
1.获取当前日期时间
使用Date对象的toString方法来打印当前日期和时间。
2.日期比较
使用getTime( ) 方法获取两个日期(自1970年1月1日经历的毫秒数值),然后比较这两个值。
使用方法before( ),after( ) 和equals( )。
使用compareTo( )方法,它是由Comparable接口定义的,Date类实现了这个接口。
3.使用SimpleDateFormat格式化日期
SimpleDateFormat允许用户自定义日期时间格式来运行。
SimpleDateFormat ft = new SimpleDateFormat( “yyyy-MM-dd hh:mm:ss” );
4.Calendar类
Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可。