抽象类:
抽象类遵循的原则:
扩展:抽象类和接口的区别,做个总结吧:
一:java概述:
Java的三种技术架构:
JAVAEE:Java Platform Enterprise Edition,开发企业环境下的应用程序,主要针对web程序开发;
JAVASE:Java Platform Standard Edition,完成桌面应用程序的开发,是其它两者的基础;
JAVAME:Java Platform Micro Edition,开发电子消费产品和嵌入式设备,如手机中的程序;
Java命令的作用:
Java分为两部分:一个是编译,一个是运行。
Javac:负责的是编译部分,当执行javac时,会启动java编译器程序,对.java文件进行编译。形成jvm可以识别的的字节码文件
Java:负责执行部分,会启动jvm对于javac变异的.class文件进行执行。
二.Java语法基础:
1.关键字:Java语言赋予特殊含义的单词:
Java 关键字列表 (依字母排序 共51组):
2.保留字:Java预留的关键字
Java 保留字列表 (依字母排序 共14组) :
byValue, cast, false, future, generic, inner, operator, outer, rest, true, var ,goto ,const,null
3.标识符:自定义名称,类名,变量名,函数名包含0-9,a-z,&,_;
1):数字不能开头
2):不可以使用关键字
4.常量与变量:
1):常量程序中不可变化的数据。作用:代表常数,便于程序的修改,增加可读性
Java语法中:常量首先声明,然后在赋值,但是只能赋值一次。需要在变量前面添加Final关键字
常量名必须大写。
2):变量代表程序的状态。变量在使用必须首先声明,格式:数据类型 变量名称 = 值;变量必须初始化才可用。
※final详情:
设计需求:有些情况必须使用Final关键字,比如方法中匿名内部类的参数传递
final成员变量表示常量,只能被赋值一次。赋值后不可以在变。
列:Final StringBuffer str = new StringBuffer("hello world");
当:str = new StringBuffer("");则报错,当str.append("aa");则可以编译
Final方法不能被子类修改,但是可以继承。
Final类不能被技能,没有子类,Final类所有方法都是Final.如String类。
在接口(interface)里变量都是public static final。
变量的作用域和生存期:
变量的作用域:作用域从变量定义的位置开始,到该变量所在大括号结束。
生命周期:在他定义的位置在内存中,到作用域结束在内存中消失。
5:数据类型
1):基本数据类型:byte、char、short为平级、int、float、long、double、Boolean
2):引用数据类型:数组,类,接口。
Boolean类型数据只能为true或false。默认值为false,但是必须初始化才能使用。
Char类型用单引号''包括起来单个字符。Java字符蚕蛹Unicode编码。默认值:'u0000'
整数型(Byte、Short、int、long)
浮点数(float、double)Java浮点型常量默认为Double型,如果声明Float需在数字后家F
6:运算符号
算数运算符、关系运算符、逻辑运算符、位运算符。
算数运算符:+ - * / % ++ --
public class Test003 { public static void main(String[] args) { int i = 5; System.out.println(i++); //5 System.out.println(++i); //7 System.out.println(i); //7 System.out.println(--i); //6 System.out.println(i--); //6 System.out.println(i); //5 } }
关系运算符:== != > >= < <=
对应java的基本数据类类型:Integer、Float、Boolean、Character、Double、Short、Byte、Long
1):数值计算中语法现象——“晋升”,即:byte、short和char(低于int的数据类型)进行算术运算后,结果会自动提升成int类型;
2):两个char型运算时,自动转换为int型;当char与别的类型运算时,也会先自动转换为int型的,再做其它类型的自动转换;
3):算数运算可以加入小括号"()"提高优先级,优先小括号内运算,再其他运算符运算;
4):算数运算前操作数变量必须赋值,反之,报语法错误。
逻辑运算符:&& || ! ^ & |
public class Test003 { public static void main(String[] args) { boolean t = true; boolean f = false; System.out.println(t && f); //false,短路与运算符,若运算符左侧为false则不计算右侧的表达式 System.out.println(t || f); //true,短路或运算符,若运算符左侧为true则不计算右侧的表达式 System.out.println(t & f); //false,与运算符,不管左侧是否为false都要计算右侧的表达式 System.out.println(t | f); //true,或运算符,不管左侧是否为true都要计算右侧的表达式 System.out.println(t ^ f); //true,异或运算符,只要左右两侧不相同则为true,反之为false System.out.println(!f); //true,取反运算符 } }
位运算符:& | ~ ^ >> << >>>
public class Test003 { public static void main(String[] args) { //在位运算符中1相当于true,0相当于false int b1 = 6; //二进制为00000000 00000000 00000000 00000110 int b2 = 11; //二进制为00000000 00000000 00000000 00001011 System.out.println(b1 & b2); //按位与运算符,二进制为00000000 00000000 00000000 00000010,结果为2 System.out.println(b1 | b2); //按位或运算符,二进制为00000000 00000000 00000000 00001111,结果为15 System.out.println(b1 ^ b2); //按位异或运算符,二进制为00000000 00000000 00000000 00001101,结果为13 System.out.println(~b1); //按位取反运算符,二进制为11111111 11111111 11111111 11111001,结果为-7 System.out.println(b1 << 2); //左移位运算符,二进制为00000000 00000000 00000000 00011000,结果为24 int b3 = -14; //二进制为11111111 11111111 11111111 11110010 System.out.println(b3 >> 2); //带符号右移位运算符,二进制为11111111 11111111 11111111 11111100,结果为-4 System.out.println(b3 >>> 2); //无符号右移位运算符,二进制为00111111 11111111 11111111 11111100,结果为1073741820 } }
条件运算符(三目运算符):<表达式1> ?<表达式2> : <表达式3>
int a = 55,b = 132,res; res = a > b ? a : b; System.out.println(res);
字符串(+)运算符:当操作数是字符串时,加(+)运算符用来合并两个字符串;当加(+)运算符的一边是字符串,另一边是数值时,机器将自动将数值转换为字符串,并连接为一个字符串。
String a ="aa"; int c = 555; String b = a+"bbb"+c; System.out.println(b);
结果:aabbb555
对象运算符instanceof:对象运算符instanceof用来测试一个指定对象是否是指定类(或它的子类)的实例,若是则返回true,否则返回false。
String s = new String("sa"); if(s instanceof Object){ System.out.println("String is object class"); }
8. 一维数组
public class Test003 { public static void main(String[] args) { int[] i; //声明一个整型的一维数组变量 int ii[]; //声明一个整型的一维数组变量 i = new int[5]; //创建一个长度为5的一维数组对象,并将变量i指向该对象 float[] f = new float[5]; //直接创建一个长度为5的单精度浮点型一维数组对象,并将变量f指向该对象 double[] d = {1, 2, 3.4, 4.5}; //直接初始化一个一维数组元素 System.out.println(d[3]); //通过数组下标来获取数组内的元素,数组下标从0开始,结果为4.5 System.out.println(f[0]); //当创建出一个数组对象时,该对象内的数组元素为该数据类型的默认值,所以此处结果为0.0 System.out.println(i[5]);//当通过数组下标来获取数组内元素时,[]内的值>=数组长度则报异常java.lang.ArrayIndexOutOfBoundsException(数组下标越界) System.out.println(ii[0]); //若一个数组变量只声明而未指向某一个具体的数组对象时,编译出错 System.out.println(d.length); //得到该数组的长度,结果为4 } }
10. 二维数组
public class Test003 { public static void main(String[] args) { int[][] i; //声明一个整型的二维数组变量 int ii[][]; //声明一个整型的二维数组变量 int[] iii[]; //声明一个整型的二维数组变量 i = new int[5][2]; //创建一个长度为5的二维数组对象,并将变量i指向该对象 float[][] f = new float[5][2]; //直接创建一个长度为5的单精度浮点型二维数组对象,并将变量f指向该对象 double[][] d = {{1}, {2,3}, {4,5,6}, {7,8,9,10}}; //直接初始化一个二维数组元素 System.out.println(d[3][1]); //通过数组下标来获取数组内的元素,数组下标从0开始,结果为8 System.out.println(f[0][0]); //当创建出二个数组对象时,该对象内的数组元素为该数据类型的默认值,所以此处结果为0.0 System.out.println(i[5][0]);//当通过数组下标来获取数组内元素时,[]内的值>=数组长度则报异常java.lang.ArrayIndexOutOfBoundsException(数组下标越界) System.out.println(ii[0][0]); //若一个数组变量只声明而未指向某一个具体的数组对象时,编译出错 System.out.println(d.length); //得到该数组的长度,结果为4 System.out.println(d[2].length); //得到二位数组内的下标为2的那个一维数组的长度 } }
流程控制语句(if,switch,for,while,do...while)
11.条件分支语句
public class Test003 { public static void main(String[] args) { int[] score = new int[5]; score[0] = -7; score[1] = 65; score[2] = 80; score[3] = 90; score[4] = 59; for(int i=0; i<score.length; i++) { if(score[i]>=0 && score[i]<60) { System.out.println("不及格"); }else if(score[i]>=60 && score[i]<80) { System.out.println("及格"); }else if(score[i]>=80 && score[i]<90) { System.out.println("良"); }else if(score[i]>=90 && score[i]<100) { System.out.println("优"); }else { System.out.println("成绩异常"); } } char ch = 'a'; switch(ch) { //switch括号内只支持 byte,short,int,char,enum五种数据类型,但是JDK1.7版本增加了String类型,所以相对于JDK1.7而言就是六种了 case 'A': //case为switch语句的入口,break为出口,从入口开始执行,直到遇到出口或代码执行完毕才结束 case 'a': System.out.println("优"); break; case 'B': case 'b': System.out.println("良"); break; case 'C': case 'c': System.out.println("及格"); break; default: //若上述条件均不匹配,则进default开始执行语句 System.out.println("不及格"); } } }
12. 循环语句
public class Test003 { public static void main(String[] args) { int res = 0; out: //out是一个标号,告诉java从哪里开始执行程序 for(int i=1; i<=10; i++) { if(i==3) continue out; //continue终止本次循环,执行下次循环 if(i==5) break out; //break跳出循环 res = res + i; } System.out.println(res); //结果为1+2+4=7 int res2 = 0; int i = 1; in: do{ if(i==3) continue in; //continue终止本次循环,执行下次循环 if(i==5) break in; //break跳出循环 res2 = res2 + i; i++; }while(i<=10); System.out.println(res2); } }