java学到框架了,发现javaSE的东西忘记的差不多了,故此挂在这里流个记录,方便将来查看,顺便巩固一下学过的知识点,文章可能有点长,我打算利用文章和代码结合的方式记录一下。顺便本文档的参考文献主要来自秦老师,当然还有自己从书本上摘抄的一下东西。
java基础
java自1991年,由sun公司的工程小组提出设计一种小型计算机语言,刚刚开始项目命名为Green,‘Green’ 项目于1992年发布了第一个产品‘ *7 ’ ,然而sun公司对这个项目不感兴趣,于是这个项目被滞留了下来,直至1996年年初,sun公司发布了java 1.0开始,java 才算是真正上台。java 分为 java SE ,java EE, java ME。
java 白皮书 关键术语:
- 简单性
- 面向对象
- 分布式
- 健壮性
- 安全性
- 体系结构中立
- 可移植性
- 解释性
- 高性能
- 多线程
- 动态性
java 开发的环境的搭建
首先,我们一般使用的是jdk版本。
安装jdk,配置环境变量,以下是环境变量的配置步骤:
(1)新建->变量名" JAVA_HOME “,变量值” C:\Java\jdk1.8.0_05 “(即JDK的安装路径)
(2)编辑->变量名” Path ",在原变量值的最后面加上“ ;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin ”
(3)新建->变量名“ CLASSPATH ”,变量值“ .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar ”
然后通过cmd 控制窗口 输入 java -version 和 javac -version
检查环境变量是否配置好
java注意事项
java是区分大小写的,一定要记住。
对于所有的类来说,类的名字第一个字母要大写。最好是驼峰命名法。
方法名都应该用小写字母开发,如果方法名含有若干单词,则后面的每个单词首字母大写。
源文件名:源文件名必须和类名相同。当保存文件的时候,你应该使用类名作为文件名保存(切记Java 是大小写敏感的),文件名的后缀为 .java。(如果文件名和类名不相同则会导致编译错
误)。
主方法入口:所有的 Java 程序由 public static void main(String []args) 方法开始执行。
java中采用多行注释和多行注释还有文档注释
/ * * / 用于多行注释
// 用于单行注释
/ ** */ 文档注释
java标识符
Java已经规定的关键字,我们自己就不能拿它当做名字了!
Java 所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。
注意:
所有的标识符都应该以字母(A-Z 或者 a-z),美元符( $ )、或者下划线( _ )开始
首字符之后可以是字母(A-Z 或者 a-z),美元符( $ )、下划线( _ )或数字的任何字符组合不能使用关键字作为变量名或方法名。
标识符是大小写敏感的
合法标识符举例:age、$salary、_value、 1_value
非法标识符举例:123abc、-salary、#abc数据类型
public static void main(String[] args) {
// byte
System.out.println("基本类型:byte 二进制位数:" + Byte.SIZE);
System.out.println(" 包 装 类 :java.lang.Byte");
System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE);
System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE);
System.out.println();
// short
System.out.println("基本类型:short 二进制位数:" + Short.SIZE);
System.out.println(" 包 装 类 :java.lang.Short");
System.out.println("最小值:Short.MIN_VALUE=" + Short.MIN_VALUE);
System.out.println("最大值:Short.MAX_VALUE=" + Short.MAX_VALUE);
System.out.println();
// int
System.out.println("基本类型:int 二进制位数:" + Integer.SIZE);
System.out.println("包装类:java.lang.Integer");
System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE);
System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE);
System.out.println();
// long
System.out.println("基本类型:long 二进制位数:" + Long.SIZE);
System.out.println("包装类:java.lang.Long");
System.out.println("最小值:Long.MIN_VALUE=" + Long.MIN_VALUE);
System.out.println("最大值:Long.MAX_VALUE=" + Long.MAX_VALUE);
System.out.println();
// float
System.out.println("基本类型:float 二进制位数:" + Float.SIZE);
System.out.println("包装类:java.lang.Float");
System.out.println("最小值:Float.MIN_VALUE=" + Float.MIN_VALUE);
System.out.println("最大值:Float.MAX_VALUE=" + Float.MAX_VALUE);
System.out.println();
// double
System.out.println("基本类型:double 二进制位数:" + Double.SIZE);
System.out.println("包装类:java.lang.Double");
System.out.println("最小值:Double.MIN_VALUE=" + Double.MIN_VALUE);
System.out.println("最大值:Double.MAX_VALUE=" + Double.MAX_VALUE);
System.out.println();
// char
System.out.println("基本类型:char 二进制位数:" + Character.SIZE);
System.out.println("包装类:java.lang.Character");
// 以数值形式而不是字符形式将Character.MIN_VALUE输出到控制台
System.out.println("最小值:Character.MIN_VALUE="+ (int) Character.MIN_VALUE);
// 以数值形式而不是字符形式将Character.MAX_VALUE输出到控制台
System.out.println("最大值:Character.MAX_VALUE="
+ (int) Character.MAX_VALUE);
}
然后就注意一下编码集我个人喜欢UTF-8的。
public static void main(String[] args) {
//整型
int i1=100;
//长整型
long i2=998877665544332211L;
//短整型
short i3=235;
//浮点型
double d1=3.5; //双精度
double d2=3;
float f1=(float)3.5; //单精度
float f2=3.5f; //单精度
//布尔类型 boolean true真/false假
boolean isPass=true;
boolean isOk=false;
boolean isBig=5>8;
if(isPass){
System.out.println("通过了");
}else{
System.out.println("未通过");
}
//单字符
char f='女';
char m='男';
}
java转义字符
类型转换
数据类型转换必须满足如下规则:
- 不能对boolean类型进行类型转换。
- 不能把对象类型转换成不相关类的对象。
- 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。
- 转换过程中可能导致溢出或损失精度
如:
int i =128;
byte b = (byte)i;
因为 byte 类型是 8 位,最大值为127,所以当 int 强制转换为 byte 类型时,值 128 时候就会导致溢出。
浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入,例如:
(int)23.7 == 23;
(int)-45.89f == -45
1、自动类型转换
自动类型转换:容量小的数据类型可以自动转换为容量大的数据类型。
例如: short数据类型的位数为16位,就可以自动转换位数为32的int类型,同样float数据类型的位数为32,可以自动转换为64位的double类型。
【演示】
public static void main(String[] args) {
double x = 3.14;
int nx = (int)x; //值为3
char c = 'a';
int d = c+1;
System.out.println(d); //98
System.out.println((char)d); //b
}
【解析:c1 的值为字符 a ,查 ASCII 码表可知对应的 int 类型值为 97, A 对应值为 65,所以
i2=65+1=66。】
2、强制类型转换
强制类型转换,又被称为造型,用于显式的转换一个数值的类型.
在有可能丢失信息的情况下进行的转换是通过造型来完成的,但可能造成精度降低或溢出。
强制类型转换的语法格式: ,运算符“()”中的type表示将值var想要转换成的目标数据类
型。 条件是转换的数据类型必须是兼容的。
【演示】
public static void main(String[] args) {
double x = 3.14;
int nx = (int)x; //值为3
char c = 'a';
int d = c+1;
System.out.println(d); //98
System.out.println((char)d); //b
}
当将一种类型强制转换成另一种类型,而又超出了目标类型的表示范围,就会被截断成为一个完全不同 的值,溢出。
public static void main(String[] args) { int x = 300;
byte bx = (byte)x; //值为44
System.out.println(bx);
}
3、常见错误和问题
1.操作比较大的数时,要留意是否溢出,尤其是整数操作时;
public static void main(String[] args) {
int money = 1000000000; //10亿
int years = 20;
int total = money*years; //返回的是负数
long total1 = money*years; //返回的仍然是负数。默认是int,因此结果会转成int值,再转成long。但是已经发生了数据丢失
long total2 = money*((long)years); //先将一个因子变成long,整个表达式发生提升。全部用long来计算。
System.out.println(total);
System.out.println(total1);
System.out.println(total2); 10 }
2.L和l 的问题:
不要命名名字为l的变量
long类型使用大写L不要用小写。
变量
类变量(静态变量:static 修饰变量名 ):独立于方法外,用static 修饰。
public class Variable{
static int allClicks=0; // 类变量
String str="hello world"; // 实例变量
public void method(){
int i =0; // 局部变量
}
}
局部变量: 类方法中的变量
for(int i = 0; i < 10; i++) {}
// i 局部变量在{}中可以使用,离开就失效
实例变量(成员变量: member v ):独立于方法之外的变量,没有static 修饰(事实上我应该称之为全局变量)
public class Test{
//这个实例变量只对子类可见
public String name;
//私有变量,仅仅在该类可见
private double sid;
.......
}
常量
常量(Constant):初始化(initialize)后不能再改变值!不会变动的值。
final 常量名=值;
final double PI=3.14;
final String LOVE="hello";
常量名一般使用大写字符。
变量的命名规范
1.所有变量、方法、类名:见名知意
2.类成员变量:首字母小写和驼峰原则 : monthSalary
3.局部变量:首字母小写和驼峰原则
4.常量:大写字母和下划线:MAX_VALUE
5.类名:首字母大写和驼峰原则: Man, GoodMan
6.方法名:首字母小写和驼峰原则: run(), runRun()
运算符
运算符operator
Java 语言支持如下运算符:
算术运算符: +,-,,/,%,++,–
赋值运算符 =
关系运算符: >,<,>=,<=,==,!= instanceof
逻辑运算符: &&,||,!
位运算符: &,|,^,~ , >>,<<,>>> (了解!!!)
条件运算符 ?:
扩展赋值运算符:+=,-=,=,/=
^ 异或 有用的很,经常见到千万不要被误导了。
二元运算符
整数运算
如果两个操作数有一个为Long, 则结果也为long
没有long时,结果为int。即使操作数全为shot,byte,结果也是int.
public static void main(String[] args) {
long a = 1231321311231231L;
int b = 1213;
short c = 10;
byte d = 8;
System.out.println((a+b+c+d)); //Long类型
System.out.println((b + c + d));//Int类型
System.out.println((c + d));//Int类型
}
浮点运算
如果两个操作数有一个为double, 则结果为double. 只有两个操作数都是float, 则结果才为float.
public static void main(String[] args) {
float a = 3.14565F;
double b = 3.194546464;
float c = 1.3123123F;
System.out.println(a+b); //double类型
System.out.println(b+c); //double类型
System.out.println(a+c); //float类型
}
关系运算符
一元运算符
(++)( --)这个是一个操作数进行的
如: i++ ; ++ i …
public static void main(String[] args) {
int a = 3;
int b = a++; //执行完后,b=3。先给b赋值,再自增。
int c = ++ a; //执行完后,c=5。先自增,再给b赋值
}
逻辑运算符
逻辑与:&&和&,逻辑或:||和|,逻辑非:!。
public static void main(String[] args) {
boolean a = true;
boolean b = false;
System.out.println("a && b = " + (a&&b));
System.out.println("a || b = " + (a||b) );
System.out.println("!(a && b) = " + !(a && b));
}
逻辑与和逻辑或采用短路的方式。从左到右计算,如果确定值则不会再计算下去。在两个操作数都为 true时,结果才为true,但是当得到第一个操作为false时,其结果就必定是false,这时候就不会再判断 第二个操作了。
逻辑与只要有一个为false, 则直接返回false. 逻辑或只要有一个为true, 则直接返回true;
位运算符
Java定义了位运算符,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型。位运算符作用在所有的位上,并且按位运算。
A = 0011 1100
B = 0000 1101
A&b = 0000 1100
A | B = 0011 1101
A ^ B = 0011 0001
~A= 1100 0011
右移一位相当于除2取商。左移一位相当于乘2。
【常见面试题:int a=2*8怎样运算效率最快?】
public static void main(String[] args) {
System.out.println(2 << 3);
}
用移位运算 int a=2<<3;
a就是2乘以8 最后结果是16 这是最省内存 最有效率的方法
这个方法确实高效率的。我来解释一下:
2的二进制是10 在32位存储器里面是0000 0000 0000 0010
左移三位后变成 0000 0000 0001 0000 也就是16
扩展运算符
字符串连接符
“+” 一般采用
String s1 =“ab”;
String s2 = “x”;
String s3 = s1 + s2;
三目条件运算符
x ? y : z
其中x为boolean类型表达式,先计算x的值,若为true,则整个三目运算的结果为表达式y的值,否则整个运算结果为表达式z的值。
public static void main(String[] args) {
int score = 80;
String type = score < 60 ? "不及格" : "及格";
System.out.println("type= " + type);
}
运算符优先级
附加
JavaDoc是一种将注释生成HTML文档的技术,生成的HTML文档类似于Java的API,易读且清晰明了。在简略介绍JavaDoc写法之后,再看一下在Intellij Idea 中如何将代码中的注释生成HTML文档。
javadoc是Sun公司提供的一个技术,它从程序源代码中抽取类、方法、成员等注释形成一个和源代码配套的API帮助文档。也就是说,只要在编写程序时以一套特定的标签作注释,在程序编写完成后,通过Javadoc就可以同时形成程序的开发文档了。javadoc命令是用来生成自己API文档的,使用方式:使用 命令行在目标文件所在目录输入javadoc +文件名.java。