Java 的语法与 C#的语法基本都一样,毕竟都是面向对象编程语言.下面记录下 Java 独有的和我在 C# 中学习不熟的语法知识
一,Java 是解释型语言
二,Java 修饰符
1. 访问控制修饰符
default,public,protected,private
2. 非访问控制修饰符
static:静态方法,不能使用类的非静态变量;静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝. 静态变量也被称为类变量.局部变量不能被声明为 static 变量.
final:
final 变量:final 变量能被显式地初始化并且只能初始化一次.被声明为 final 的对象的引用不能指向不同的对象.但是 final 对象里的数据可以被改变.也就是说 final 对象的引用不能改变,但是里面的值可以改变.(???) final 修饰符通常和 static 修饰符一起使用来创建类常量.
final 方法:final 方法可以被子类继承,但是不能被子类修改.声明 final 方法的主要目的是防止该方法的内容被修改.
final 类:final 类不能被继承,没有类能够继承 final 类的任何特性.
abstract:
abstract 类:抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充.一个类不能同时被 abstract 和 final 修饰.如果一个类包含抽象方法,那么该类一定要声明为抽象类,否则将出现编译错误.抽象类可以包含抽象方法和非抽象方法.抽象类可以不包含抽象方法.
abstract 方法:抽象方法是一种没有任何实现的方法,该方法的的具体实现由子类提供.抽象方法不能被声明成 final 和 static.
synchronized:synchronized 关键字声明的方法同一时间只能被一个线程访问.
transient:序列化的对象包含被 transient 修饰的实例变量时,java 虚拟机 (JVM) 跳过该特定的变量.该修饰符包含在定义变量的语句中,用来预处理类和变量的数据类型.(???)
volatile:volatile 修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值.而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存.这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值.
三,其他语法
1. java 增强 for 循环
Java5 引入了一种主要用于数组的增强型 for 循环.
for(声明语句 : 表达式)
{
//代码句子
}
String [] names ={"James", "Larry", "Tom", "Lacy";
for( String name : names ) {
System.out.print( name );
System.out.print(",");
}
2. Java Number & Math 类
Number 的内置数据类型有:byte,int,long,double 等
内置数据类型的包装类有:Integer,Long,Byte,Double,Float,Short
Java 的 Math 包含了用于执行基本数学运算的属性和方法,如初等指数,对数,平方根和三角函数.
3. StringBuffer 和 StringBuilder 类
和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象.
StringBuilder 的方法不是线程安全的(不能同步访问).由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类.然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类.
4. Java 日期时间
java.util 包提供了 Date 类来封装当前的日期和时间. Date 类提供两个构造函数来实例化 Date 对象.
第一个构造函数使用当前日期和时间来初始化对象.
Date( )
第二个构造函数接收一个参数,该参数是从 1970 年 1 月 1 日起的毫秒数.
Date(long millisec)
(1)使用 SimpleDateFormat 格式化日期:
import java.util.*;
import java.text.*;
public class DateDemo {
public static void main(String args[]) {
Date dNow = new Date( );
SimpleDateFormat ft = new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
System.out.println("Current Date: " + ft.format(dNow));
}
}
//Current Date: Wed 2016.11.09 at 08:23:19 AM UTC
(2)使用 printf 格式化日期
System.out.printf("年-月-日格式:%tF%n",date);
//年-月-日格式:2012-09-10
(3)解析字符串为时间
SimpleDateFormat 类有一些附加的方法,特别是 parse(),它试图按照给定的 SimpleDateFormat 对象的格式化存储来解析字符串.
import java.util.*;
import java.text.*;
public class DateDemo {
public static void main(String args[]) {
SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd");
String input = args.length == 0 ? "1818-11-11" : args[0];
System.out.print(input + " Parses as ");
Date t;
try {
t = ft.parse(input);
System.out.println(t);
} catch (ParseException e) {
System.out.println("Unparseable using " + ft);
}
}
}
(4)Calendar 类
Calendar 类的功能要比 Date 类强大很多,而且在实现方式上也比 Date 类要复杂一些.
Calendar 类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用 getInstance 方法创建即可.
Calender 的月份是从 0 开始的,但日期和年份是从 1 开始的
Calendar c = Calendar.getInstance();//默认是当前日期
//创建一个代表2009年6月12日的Calendar对象
Calendar c1 = Calendar.getInstance();
c1.set(2009, 6 - 1, 12);
Calendar 类对象信息的获得
Calendar c1 = Calendar.getInstance();
// 获得年份
int year = c1.get(Calendar.YEAR);
// 获得月份
int month = c1.get(Calendar.MONTH) + 1;
// 获得日期
int date = c1.get(Calendar.DATE);
5. Java 休眠(sleep)
sleep() 使当前线程进入停滞状态(阻塞当前线程),让出 CPU 的使用,目的是不让当前线程独自霸占该进程所获的 CPU 资源,以留一定时间给其他线程执行的机会.
import java.util.*;
public class SleepDemo {
public static void main(String args[]) {
try {
System.out.println(new Date( ) + "\n");
Thread.sleep(1000*3); // 休眠3秒
System.out.println(new Date( ) + "\n");
} catch (Exception e) {
System.out.println("Got an exception!");
}
}
}
来源: http://www.bubuko.com/infodetail-2472948.html