java SE基础
1.java基础语法
程序由语句组成,语句包含用数据类型、运算符、表达式等。
java语言的数据类型、运算符与表达式等是从c++语言简化而来的、高效、简洁。
2.java的数据类型
java数据类型可分为两种:基本数据类型和引用类型。
基础类型:boolean(布尔型)、byte(字节型)1个字节、int(整型)4个字节、short(短整型)2个字节、long(长整型)8个字节、char(字符型)2个字节、float(单精度浮点型)4个字节、double(双精度浮点型)8个字节。
默认值:boolean(false)、byte((byte)0)、int(0)、short((short)0)、long(0L)、char(‘\u0000’)、float(0.0F)、double(0.0D或0.0)。
引用类型:
3.标识符和关键字
标识符:指程序中包含、类、接口、变量或方法的名字的字符序列。
3.1关键字
数据类型:boolean、byte、short、int、long、double、char、float。
包引入和包声明:import、package。
类和接口声明:class、extends、implements、interface。
流程控制:if、else、switch、do、while、case、break、continue、return、defalut、for。
异常处理:try、catch、finally、throw、throws。
修饰符:abstract、final、native、private、protected、public、static、synchronized、transient、volatile。
其他:new、instanceof、this、super、void、assert、const*、enum、goto*、strictfp。
注:加*号的java没有使用。
4.常量
java程序运行时值不可修改的量称为常量。
常量标识符一般大写。
5.变量
java程序运行时值发生改变的量称为变量。
例:基本数据类型转换
public class TypeCast {
public static void main(String[] args) {
//自动类型转换
byte b = 1;
int i = b;
long l = b;
float f = b;
double d = b;
char ch = 'c';
//转换为对应的ASCII码值
int i1 = ch;
System.out.println("i2:" + i1);
short s = 99;
//强制类型转换
char c = (char) s;
System.out.println("c:" + c);
byte b1 = (byte) 129;
System.out.println("b1:" + b1);
}
}
程序运行结果为:
i2:99
c:c
b1:-127
例:自增与自减运算
public class TypeCast {
public static void main(String[] args) {
int i1=5;
int i2=10;
int i=(i2++);
System.out.println("i="+i);
System.out.println("i2="+i2);
i=(++i2);
System.out.println("i="+i);
System.out.println("i2="+i2);
i=(--i1);
System.out.println("i="+i);
System.out.println("i1="+i1);
i=(i1--);
System.out.println("i="+i);
System.out.println("i1="+i1);
}
}
程序运行结果为:
i=10
i2=11
i=12
i2=12
i=4
i1=4
i=4
i1=3
例:逻辑运算符运算
public class Logic {
public static void main(String[] args) {
boolean a,b,c;
a=true;
b=false;
c=a&b;
System.out.println(c);
c=a|b;
System.out.println(c);
c=a^b;
System.out.println(c);
c=!a;
System.out.println(c);
c=a&&b;
System.out.println(c);
c=a||b;
System.out.println(c);
}
}
程序运行结果为:
false
true
true
false
false
true
6.if语句
语法:if(<布尔表达式>){
<语句1>
}esle{
<语句2>
};
例:if语句判断某一年是闰年
public class LeapYear {
public static void main(String[] args) {
// args[0]表示命令行的第一个参数并把它由字符串转换为整型
int year = Integer.parseInt(args[0]);
// 1表示闰年,0表示不是闰年
int leap;
// 判断是否被4整除
if (year % 4 == 0) {
if (year % 100 == 0) {
if (year % 400 == 0)
leap = 1;
else
leap = 0;
}
// 是闰年
else
leap = 1;
} else
leap = 0;
if (leap == 1)
System.out.println(year + "年是闰年");
else
System.out.println(year + "年不是闰年");
}
}
程序运行结果为:
右击->RunConfigurations->Arguments->输入年份->判断是闰年还是平年了
7.switch语句
语法:switch(<表达式>){
case<常量表达式1>:
<语句1>;
case<常量表达式2>:
<语句2> ;
...
case<常量表达式n>:
<语句n>;
default:
<语句>;
}
注:表达式只能是byte、short、char、int。
例:switch语句判断季节
public class SwitchText{
public static void main(String[] args) {
int i=0;
// args[0]表示命令行的第一个参数并把它由字符串转换为整型
i=Integer.parseInt(args[0]);
switch(i){
case 1:
System.out.println("It is spring now!");
break;
case 2:
System.out.println("It is summer now!");
break;
case 3:
System.out.println("It is autumn now!");
break;
default:
System.out.println("It is winter now!");
}
}
}
程序运行结果为:
右击->RunConfigurations->Arguments->输入一个数字
8.for语句
语法:for(x1:x2:x3){
<语句1>
<语句2>
<语句3>
}
例:for语句运算1*2*3*n的积
public class MultiplyCalcuate{
public static void main(String[] args) {
long l=1;
//把字符串转换为整型
int k=Integer.parseInt(args[0]);
for(int i=1;i<k;i++){
l=l*i;
}
System.out.println("1*2*3...*n"+k+"="+l);
}
}
程序运行结果为:
RunConfigurations->Arguments->输入一个数字
9.while语句
语法:whlie(<布尔表达式>){
<语句1>
<语句2>
<语句n>
}
10.do...while
语法:do{
<语句1>
<语句2>
<语句n>
}while(<布尔表达式>);
11.流程跳转语句
break:从switch语句、循环语句或标号标识的代码块中退出。
continue:跳过本次循环,立即进入下次循环。
return:退出本方法,跳到上层调用方法。
12.方法与递归
在java语言中,一个方法代表一个具体的逻辑功能,表达方法所属的类的对象所有的一种行为或一种操作。递归是一种重要的程序设计技术。用递归表达程序设计逻辑十分简明。
方法:java中的一个方法类似于其他语言的函数,它代表了一个具体的逻辑功能,表达了它所属的类的对象所具有的一种行为或一种操作。
语法:[修饰符1 修饰符2 修饰n]<返回类型><方法名>(<形式参数>){
<方法体>
}
例:打印100之间所有的质数
public class PrimeNumber {
//判断是否为质数
boolean isPrime(int n) {
for (int i = 2; i <= n / 2; i++)
//能被0整除不是质数
if (n % i == 0)
return false;
return true;
}
void printPrime(int m) {
int j = 0;
for (int i = 2; i <= m; i++) {
if (isPrime(i)) {
j++;
//每10个质数一行
if (j % 10 == 0) {
System.out.print(" " + i);
//换行
System.out.println();
} else
System.out.print(" " + i);
}
}
}
public static void main(String[] args) {
PrimeNumber pn = new PrimeNumber();
pn.printPrime(100);
}
}
程序运行结果为:
2 3 5 7 11 13 17 19 23 29
31 37 41 43 47 53 59 61 67 71
73 79 83 89 97
递归:递归是相当重要的一种设计技术,用递归表达程序设计逻辑十分简明。递归可分为两种:直接递归和间接递归。
直接递归:是指方法运行时又调用了自身。
间接递归:是指方法运行时通过调用其他方法。
例:递归计算1+2+3+...+100的和
public class Sum{
static int i(int j){
return j==0?0:j+i(j-1);
}
public static void main(String[] args) {
System.out.println("1+2+3+...+100的和是"+i(100));
}
}
程序运行结果为:
1+2+3+...+100的和是5050
例:递归计算Fibonacci数列的第5个值
public class Sum{
public static void main(String[] args) {
System.out.println(f(5));
}
public static int f(int i){
if(i==1||i==2){
return 1;
}else{
return f(i-1)+f(i-2);
}
}
}
程序运行结果为:
5
13.命名规范
类名和接口名:首字母大写,如果类名有几个单词组成,则采用骆峰标识,即每个单词首字母大写。如:HelloWorld。
方法名和变量名:首字母小写,如果方法名或变量名有几个单词组成,则第一个单词首字母小写,剩下首字母都大写。如:toString。
包名:采用小写形式。如:org.innerclass.anonymous。
常量名:采用大写形式,如果有几个单词组成,则用_隔开。如:final int VALUE_ONE=9。
综合实例
求某一个日期对应的是星期几
import java.text.SimpleDateFormat;
import java.util.Date;
public class CalculateWeeDay{
public static void main(String[] args) {
//实例化一个当前日期时间
Date date=new Date();
//格式化日期
SimpleDateFormat f=new SimpleDateFormat("yyyy-MM-dd");
System.out.println(f.format(date));
String str=f.format(date);
//分隔日期字符串
String[] str1=str.split("-");
//使用包装类把字符串形式的整数值转换为整型
//year为年份
int year=Integer.parseInt(str1[0]);
//month为月份
int month=Integer.parseInt(str1[1]);
//day为日
int day=Integer.parseInt(str1[2]);
//至今总天数
int total;
int week;
int i;
boolean leap=false;
//判断是否是闰年
leap=(year%400==0)|(year%100!=0)&(year%4==0);
//起始日期
week=1;
//计算total的值
total=year-1980+(year-1980+3)/4;
//计算当年前几月的累计天数与total的初值之和
for(i=1;i<=month-1;i++){
//判断当前月份
switch(i){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
total=total+31;
break;
case 4:
case 6:
case 9:
case 11:
total=total+30;
break;
case 2:
if(leap)
total=total+29;
else
total=total+28;
break;
}
}
//将本月天数加到total上
total=total+day;
week=(week+total)%7;
System.out.print("today"+year+"-"+month+"-"+day+"is");
switch(week){
case 0:
System.out.println("Sunday");
break;
case 1:
System.out.println("Monday");
break;
case 2:
System.out.println("Tuesday");
break;
case 3:
System.out.println("Wednesday");
break;
case 4:
System.out.println("Thursday");
break;
case 5:
System.out.println("Friday");
break;
case 6:
System.out.println("Saturday");
}
}
}
程序运行结果为:
2016-12-12
today 2016-12-12 is Monday