JAVA基础概念
(1)类、对象:以类的方式组织代码、以对象的方式组织数据。同类对象的抽象类,类是对象的模板。
(2)变量:存储数据的单元,name、type、value三部分。
Name:标识符的规则、字符集(iso8859-1、BIG5、GB2312、GBK、GB18030、Unicode、UTF-8、UTF-16)。
Type:原始类型(byte、short、int(二进制、八进制、十六进制表示形式)、long、float、double(十进制形式、科学计数法形式)、char、boolean)和引用类型(class、interface、array)、自动类型转换、强制类型转换、类型提升问题(所有二元运算,都存在)。
/*
*测试标识符的写法
*/
public class Welcome{
public static void main(String[] args){
int $abc = 3;
int $ = 5;
int _123=5;
//int 123abc = 6; //标识符不能以数字开头
//int abc# = 3; //标识符不能包含除了字母、数字、下划线、$之外的其他字符
//int class = 3;
int 武汉 = 10; //java内部采用了Unicode字符集,universal。
}
}
//测试整数类型:byte,short,int,long。以及进制之间的转换问题
public class TestDataType {
public static void main(String[] args){
int a = 10;
int a2 = 010;
int a3 = 0xf;
// byte b = 200;
// System.out.println(b);
System.out.println(a);
System.out.println(a2);
System.out.println(a3);
System.out.println(Integer.toBinaryString(a));
System.out.println(Integer.toOctalString(a));
System.out.println(Integer.toHexString(a));
int a = 0b0000_0000_0000_0000_0000_0000_0000_0011;
int b = 1_2312_3131;
System.out.println(a);
System.out.println(b);
int a5 = 10;
long a6 = 200;
byte b2 = 100; //如果数据的大小没有超过byte/short/char的表述范围,则可以自动转型。
long a7 = 11123213232L;
long l = 3;
long l2 = l+3; //L问题
}
}
//测试浮点数
public class TestFloatType {
public static void main(String[] args){
//double d = 3.14; //浮点数常量默认类型是double。
//float f = 6.28F;
double d2 = 314e-2; //采用科学计数法的写法
System.out.println(d2);
float f = 0.1f;
double d = 1.0/10;
System.out.println(f==d); //false
}
}
//测试char
public class TestCharType {
public static void main(String[] args){
char c1 = 'a';
char c2 = '方'; //unicode 2: 0-65535
char c3 = '\n';
System.out.print(c1);
System.out.print(c3);
System.out.print(c2);
char c4 = 'a';
int i = c4 + 2;
char c5 = (char)i; //强制转型
System.out.println(c5);
//循环打印a-z
for(int j=0;j<26;j++){
char temp = (char)(c4+j);
System.out.print(temp);
}
//java里面的字符串,是定义成:String类了。
String str = "abcdefghijklmnopqrstuvwxyz";
System.out.println("\n"+str);
boolean b = false; //false
if(b){
//if(b==true)..if(b=true)
System.out.println("true");
}
}
```
}
byte->short->int->long/char->int/int->double float->double///int…>float/long…>float/long…>double
//测试自动转型和强制转型 CAST
public class TestCast {
public static void main(String[] args){
byte b = 123;
//byte b2 = 300;
//char c = -3;
char c2 = 'a';
int i = c2;
long d01 = 123213;
float f = d01;
//测试强制转型
int i2 = -100;
char c3 = (char)i2; //-100超过char的表数范围,所以转换成完全不同的值,无意义的值!
System.out.println(c3);
*/
/*
//表达式中的类型提升问题
int a = 3;
long b = 4;
double d = 5.3;
int c = (int)(a+b); //做所有的二元运算符(+-/*%),都会有类型提升的问题!
float f = (float)(a + d);
*/
int money = 1000000000; //10亿
int years = 20;
long total = (long)money*years; //返回的是负数//(long)(maney*years)
System.out.println(total);
//一个人70年心跳多少次
long times = 70L*60*24*365*70;
System.out.println(times);
}
}
(3)局部变量、实例变量、类变量(在类中,用static声明的成员变量为静态成员变量,它为该类的公用变量、属于类,被该类的所有实例共享,在类被载入时被显示初始化;对于该类的所有对象来说,static成员变量只有一份;可以使用“对象.类属性”来调用,不过,一般都是用”类名.类属性”;static变量置于方法区中)、常量。局部变量使用前必须要先赋值、实例变量则可以不需要。变量名、常量名、方法名、类名的命名规则。
//变量首字母小写,驼峰原则;类名首字母大写,驼峰原则;常量全部大写,单词之间下划线相隔
//实例变量、成员变量、常量
public class TestVariable {
int t; //实例变量,成员变量,属性
public static void main(String[] args){
int a; //局部变量使用之前必须要赋值,而实例变量则有缺省初值
int b = a+3;
int x,y,z;
final int C=34;
C = 35;
final int MAX_SPEED = 120;
}
}
(4)运算符:算术运算符、赋值运算符、关系运算符、逻辑运算符(&&、||、!)、位运算符(&(按位与)、|(按位或)、^(按位异或)、~(按位取反)、>>(右移运算符,右移一位相当于除2取商)、<<(左移运算符,左移一位相当于乘2)、>>>(无符号右移、忽略符号位扩展、0补最高位))、字符串连接符(+)、条件运算符、扩展运算符(+=、-=、=、/=、%=)。短路求值。运算符优先级。
//运算符Operator
算术运算符:+、-、、/、%、++、–
赋值运算符:=
关系运算符:>、<、>=、<=、==、!=、instanceof
逻辑运算符:&&、||、!
位运算符:&(按位与)、|(按位或)、^(按位异或)、~(按位取反)、>>(右移运算符,右移一位相当于除2取商)、<<(左移运算符,左移一位相当于乘2)
条件运算符:?:
扩展运算符:+=、-=、*=、/=、%=
(1) 5/2 = 2, 5/2.0=2.5
(2) x=x+1/x+=1/x++ (06slides.pdf)
(3) CONSTANT: private static final double PI = 3.14;
(4) 函数,整形与浮点数的除法运算操作符,操作符优先级,类型转换,常量,布尔数据类型,值的比较,布尔表达式,短路求值 (07slides.pdf)
(5) Average2Integers.java
public class TestOperator {
public static void main(String[] args){
/*
double d = 10.2%3;
System.out.println(d);
int a = 3;
int b = a++; //执行完后,b=3。先给b赋值,再自增。
int c = ++a; //执行完后,c=5。先自增,再给b赋值
System.out.println(a);
System.out.println(b);
System.out.println(c);
*/
// int c = 3/0;
/*
boolean c = 1<2&&2>(3/0); //短路运算
System.out.println(c);
*/
/*
//测试位运算
int m = 8;
int n = 4;
System.out.println(m&n);
System.out.println(m|n);
System.out.println(~m);
System.out.println(m^n);
int a = 3*2*2;
int b = 3<<3; //相当于:3*2*2;
int c = 12/2/2;
int d = 12>>2;
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
boolean b1 = true&false; //没有短路功能
System.out.println(b1);
*/
/*
//扩展运算符
int a = 3;
a +=5; //a = a+5;
*/
/*
//字符串相连:加号两边只要有一个为字符串,则变为字符串连接符,整个结果为字符串。
System.out.println(4+"5");
*/
int a=3;
int b=5;
String str= "";
/*
if(a
str = (a<b)?"a:"a>=b";
System.out.println(str);
}
}
(5)控制语句:顺序、语句块、选择(单选、双选、多选(if else if、switch语句(case值可以是int或者自动可以转换为int的类型byte、char、short,以及枚举和字符串,理解case穿透现象,一般每个case后面都要加break,防止case穿透)))、循环(for循环语句(迭代不一定得是i++,可以是任何的迭代),while循环语句(while先判断后执行、dowhile先执行后判断))。变量的作用域。
//控制语句
//顺序、选择(单选、双选、多选)、循环
//语句块,变量的作用域,if套嵌,switch语句,for循环语句,while循环语句(07slides.pdf)
Checkerboard.java
/*
- 测试if语句
*/
public class TestIf {
public static void main(String[] args) {
double d = Math.random();
int e =1+(int)(d*6);
System.out.println(e);
```
if(e>3) {
System.out.println("大数!");
System.out.println("大数!!!!");
}else{
System.out.println("小数!");
}
System.out.println("测试多选择结构");
if(e==6){
System.out.println("运气非常好!");
}else if(e>=4){
System.out.println("运气不错!");
}else if(e>=2){
System.out.println("运气一般吧");
}else{
System.out.println("运气不好!");
}
```
}
}
//试swtich语句
public class TestSwitch {
public static void main(String[] args) {
double d = Math.random();
int e =1+(int)(d*6);
System.out.println(e);
System.out.println("测试多选择结构");
if(e==6){
System.out.println("运气非常好!");
}else if(e==5){
System.out.println("运气很不错!");
}else if(e==4){
System.out.println("运气还行吧");
}else{ //1,2,3
System.out.println("运气不好!");
}
System.out.println("#########################");
switch(e){ //int,或者自动可以转为int的类型(byte,char,short)。枚举。//JDK7中可以放置字符串。
case 6:
System.out.println("运气非常好!");
break; //一般在每个case后面都要加break,防止出现case穿透现象。
case 5:
System.out.println("运气很不错!");
break;
case 4:
System.out.println("运气还行吧");
break;
default:
System.out.println("运气不好!");
break;
}
System.out.println("***************************下面例子反过来利用了case穿透现象!");
char c = 'a';
int rand =(int) (26*Math.random());
char c2 = (char)(c+rand);
System.out.print(c2 + ": ");
switch (c2) {
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
System.out.println("元音");
break;
case 'y':
case 'w':
System.out.println("半元音");
break;
default:
System.out.println("辅音");
}
}
}
//测试JDK7中的switch新特性
public class TestSwitch02 {
public static void main(String[] args) {
String a = "方";
switch (a) { //JDK7的新特性,表达式结果可以是字符串!!!
case "何":
System.out.println("何");
break;
case "方":
System.out.println("方");
break;
default:
System.out.println("大家好!");
break;
}
}
}
//测试while循环的用法
public class TestWhile {
public static void main(String[] args) {
int a = 1; //初始化
while(a<=100){ //条件判断
System.out.println(a); //循环体
a++; //迭代
}
System.out.println("while循环结束!");
//计算:1+2+3+...+100
int b = 1;
int sum = 0;
while(b<=100){
sum += b; //sum = sum + b;
b++;
}
System.out.println("和为:"+sum);
}
}
//while先判断后执行,dowhile先执行后判断
//测试For循环语句
public class TestFor {
public static void main(String[] args) {
int a = 1; //初始化
while(a<=100){ //条件判断
System.out.println(a); //循环体
a+=2; //迭代
}
System.out.println("while循环结束!");
for(int i = 1;i<=100;i++){ //初始化//条件判断 //迭代//迭代不一定非得是i++,可以是任何的迭代
System.out.println(i); //循环体
}
System.out.println("while循环结束!");
}
}
//测试break和continue
public class TestBreakContinue {
public static void main(String[] args) {
int total = 0;
System.out.println("Begin");
while (true) {
total++;
int i = (int) Math.round(100 * Math.random());
if (i == 88) {
break;
}
}
System.out.println("Game over, used " + total + " times.");
System.out.println("#########################");
for (int i = 100; i < 150; i++) {
if (i % 3 == 0) {
continue;
}
System.out.println(i);
}
System.out.println("**********************");
int count = 0;
outer: for (int i = 101; i < 150; i++) {
for (int j = 2; j < i / 2; j++) {
if (i % j == 0)
continue outer;
}
System.out.print(i + " ");
}
}
}
(6)break、continue、带标签的break和continue:break跳出循环、continue跳出当次循环。