Java帝国
Java初生
- Java 2标准版(J2SE):桌面领域(桌面开发,控制台开发....)
Java 2移动版(J2ME):手机领域(嵌入式开发,收集小家电)- Java 2企业版(J2EE):服务器领域(web端,服务器开发)
Java发展
- 基于Java开发了巨多的平台,系统,工具
- 构建工具:Ant,Maven,Jekins
- 应用服务器:Tomcat,Jetty,Jboss,Websphere,Weblogic
- Web开发:Eclipse,NetBean,intellij IDEA,
- ........
- 2006年:Hadoop(大数据领域)
- 2008:Android (手机端)
Java特性和优势
- 简单性
- 面向对象
- 可移植性
- 高性能
- 分布式
- 动态性
- 反射
- 多线程
- 安全性
- 健壮性
- 思考:Java为啥这么成功:天时地利人和。
JDK、JRE、JVM
- JDK:Java Development kit
- JRE:JavaRuntime Environment
- JVM:Java Virtual Machine
Java开发环境搭建
- JDK下载与安装
百度搜索JDK8,找到下载地址-->同意协议-->下载电脑对应版本-->双击安装JDK-->记住安装路径
- 配合环境变量
- 1.我的电脑-->右键-->属性
- 2.环境变量-->JAVA_HOME
- 3.配置path变量
- JDK目录介绍
- Hello World及简单的语法规则
- Notepad++ 安装和使用
HelloWorld
- 1.新建一个文件夹,存放代码
- 2.新建一个java文件
- 文件后缀为.java
- Hello.java
- 坑点:系统可能没有显示文件名,需要手动打开
- 编写代码
public class Hello{
public static void main(String[] args){
System.out.print("Hello,World");
}
}
- 编译 javac java文件,会生成一个class文件
- 运行class文件,java class文件,不用写后缀
Java程序运行机制
- 编译型
- 解释型
- 程序运行机制
注释、标识符、关键字
1.注释
注释并不会被执行,是写给我们人看的,平时写代码,一定要注意规范。
- Java中的注释有三种:
- 单行注释
- 多行注释
- 文档注释
- 单行注释
2.标识符
标识符注意点
- 所有的标识符都应该以字母(A-Z或者a-z),美元符号($),或者下划线(_)开始
- 首字母之后可以是字母(A-Z或者a-z),美元符号($),下划线(_)或数字的任何字符组合
- 不能使用关键字作为变量名或方法名
- 标识符是大小写敏感的
- 合法标识符举例:age、$salary、_value、__1_value
- 非法标识符举例:123abc、-salary、[[abc]]
- 可以使用中文命名,但是一般不建议这样去使用,也不建议使用拼音,很Low
public class Demo01 {
public static void main(String\[\] args) {
String 王者荣耀 \= "百星王者"; //可以使用中文命名,但是一般不建议这样去使用,也不建议使用拼音,很Low
String \_王者荣耀 \= "倔强青铜"; //可以使用中文命名,但是一般不建议这样去使用,也不建议使用拼音,很Low
System.out.println(王者荣耀); //打印变量王者荣耀
System.out.println(\_王者荣耀); //打印变量\_王者荣耀
//大小写敏感
String Man = "Taoing"; //变量名 大小写敏感
String man = "Taoing"; //变量名 大小写敏感
String Ahello = "Taoing";
String hello = "Taoing";
String $hello = "Taoing";
String \_hello = "Taoing";
String hekko1 = "Taoing";
//String 1hello = "Taoing";
//String [[hello]] = "Taoing";
}
}
3.关键字
obstract | assert | boolean | break | byte |
---|---|---|---|---|
case | catch | char | class | const |
continue | default | do | double | else |
enum | extends | final | finally | float |
for | goto | if | implements | import |
instanof | int | interface | long | native |
new | package | private | protected | public |
return | strictfp | short | static | super |
switch | synchronized | this | throw | throws |
transient | try | void | volatile | while |
- Java所有的组成部分都需名字。类名、变量名以及方法名都被称为标识符
3. 数据类型
- 强类型语言
- 要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用
- 弱类型语言
- 要求变量的使用要
严格符合规定,所有变量都必须先定义后才能使用
- 要求变量的使用要
- Java的数据类型分为两大类
- 基本类型(primitive type)
- 基本类型(primitive type)
public class Demo02 {
public static void main(String\[\] args) {
//八大基本数据类型
//整数
int num1 = 10; //最常用
byte num2 = 20;
short num3 = 30;
long num4 = 40L; //long类型要在数字后面加个L
//小数:浮点数
float num5 = 50.1F; //float类型要在数字后边加个F
double num6 = 3.141592653589793238462643;
//字符
char name = 'T';
//字符串,String不是关键字,类
// String namea = "Taoing The heack";
//布尔值
boolean flag = true;
boolean flag1 = false;
}
}
- 引用类型 (reference type)
数据类型拓展及面试题讲解
public class Demo03 {
public static void main(String\[\] args) {
//整数拓展:进制 二进制:0b开头 十进制 八进制:0开头 十六进制:0x开头
int i = 10; //十进制
int i2 = 010; //八进制0
int i3 = 0x10; //十六进制0x 0~9 A~F 16
System.out.println(i);
System.out.println(i2);
System.out.println(i3);
System.out.println("==========================================================");
//==========================================================
//浮点数拓展? 银行业务怎么表示?
//BigDecimal --->数学工具类
//==========================================================
//float; 表示的字符是有限的 离散的 舍入误差 大约 接近但不等于
//double;
//最好完全使用浮点数进行比较
//最好完全使用浮点数进行比较
//最好完全使用浮点数进行比较
float f = 0.1f; //0.1
double d = 1.0 / 10; //0.1
System.out.println(f == d); //false
System.out.println(f);
System.out.println(d);
float d1 = 2313131231212313f;
float d2 = d1 + 1;
System.out.println(d1 == d2); //true
//========================================================== //字符串拓展?
//==========================================================
System.out.println("==========================================================");
char c1 = 'a';
char c2 = '中';
System.out.println(c1);
System.out.println((int) c1); //强制转换
System.out.println(c2);
System.out.println((int) c2); //强制转换
//所有的字符本质还是数字
//编码 Unicode表:97代表小写a ,65代表大写A 占有2个字节 0~65536个字符 Excel表格 2 16次方 = 65536 //U0000 UFFFF char c3 = '\\u0061';
System.out.println(c3); //a
//转义字符
// \\t 制表符
// \\n 换行
// ...更多百度
System.out.println("==========================================================");
System.out.println("Hello\\tWorld");
System.out.println("Hello\\nWorld");
//==========================================================
//对象从内存分析
System.out.println("==========================================================");
//不相等
String sa = new String("hello world");
String sb = new String("hello world");
System.out.println(sa == sb);
//相等
String sc = "hello world";
String sd = "hello world";
System.out.println(sc == sd);
//==========================================================
//布尔值拓展
System.out.println("==========================================================");
boolean flag = true;
if (flag == true) {} //新手
if (flag){} //老手
//Less is More! 代码要精简易读
}
}
类型转换
- 由于Java是强类型语言,所以要进行有些运算的时候,需要用到类型转换
低 ------------------------>高
byte,short,char-> int -> long -> float -> double
- 运算中,不同类型的数据先转化为同一类型,然后进行运算。
- 强制类型转换
- 自动类型转换
public class Demo05 {
public static void main(String\[\] args) {
int i = 128;
byte b = (byte) i;//内存溢出
double c = i; //自动转换 格式: (类型)变量名 低\--->高
//强制转换 格式: (类型)变量名 高\--->低
//自动转换 格式: (类型)变量名 低\--->高
System.out.println(i);
System.out.println(b);
System.out.println(c);
/\*注意点:
1.不能对布尔值进行转换
2.不能将对象类型转换为不相干类型。
3.在把大容量转换到低容量的时候,强制转换,
4.转换的时候可能存在内存溢出,或者精度问题!
\*/
System.out.println("=========================================");
System.out.println((int) 23.7); //23
System.out.println((int)-45.89f);
System.out.println("=========================================");
char r = 'a';
int d = r + 1;
System.out.println(d);
System.out.println((char) d);
}
}
public class Demo06 {
public static void main(String\[\] args) {
//操作比较大的数的时候,注意溢出问题
//JDK7新特性,数字之间可以用下划线分隔
int money = 10\_0000\_0000;
int years = 20;
int total= money \* years; //-1474836480,计算的时候溢出了
System.out.println(total);
long tital2 = money \* years; //默认是int,转换前已经存在问题
System.out.println(tital2);
long tital3 = money \* ((long)years); //先把一个数转换为long
System.out.println(tital3); //20000000000
}
}
变量、常量、作用域
1.变量
- 变量就是可以变化的量!
- Java是一种强类型语言,每个变量都必须声明其类型
- Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。
type varName [=value] [{,varName[=value]}];
//数据类型 变量名 =值; 可以使用逗号隔开来声明多个同类型变量。
- 注意事项:
- 每个变量都有类型,类型可以是基本类型,也可以是引用类型。
- 变量名必须是合法的标识符
- 变量声明是一条完整的语句,因此每一个声明都必须以分号结束。
2.变量作用域
- 类变量
- 实例变量
- 局部变量
public class Demo08 {
//类变量:static
static double salary \= 2500;
//属性:变量
//实例变量:从属于对象;如果不自行初始化,这个类型的默认值 0 0.0 u0000 //布尔值:默认false
//除了基本类型,其余默认值都是null
String name;
int age;
//main方法
public static void main(String\[\] args) {
//局部变量,必须声明和初始化值
int i = 10;
System.out.println(i);
//变量类型 变量名字 == new Demo08(); Demo08 demo08 = new Demo08();
System.out.println(demo08.age);
System.out.println(demo08.name);
//类变量 static System.out.println(salary);
}
//其他方法
public void add() {
// System.out.println(i);
}
}
常量
- 常量(Constant):初始化(initialize)后不能在改变值!不会变动的值
- 所谓常量可以理解为一种特殊的变量,它的值被设定后,在程序运行过程中不允许改变。
final 常量名 = 值;
final double PI = 3.14;
public class Demo09 {
//修饰符,不存在先后顺序
static final double PI = 3.14;
final static double PI1 = 3.1415926;
public static void main(String\[\] args) {
System.out.println(PI);
System.out.println(PI1);
}
}
- 常量名一般使用大写字符。
变量的命名规范
- 所有变量 、方法名、类名:见名知意
- 类成员变量:首字母小写和驼峰原则:monthSalary
- 局部变量:首字母小写和驼峰原则
- 常量:大写字母和下划线:MAX_VALUE
- 类名:首字母大写和驼峰原则:Man,GoodMan
- 方法名:首字母小写和驼峰原则:run(),runRun()
运算符
- Java语言运算符:
- 算术运算符:+, - , * , / , % , ++ ,--
- 赋值运算符:=
- 关系运算符:>,<,>=,==,!=instanceof
- 逻辑运算符:&&,||,!
- 位运算符:&,|,^,~,>>,<<,(>>>了解)
- 拓展运算符:+=,-+,*=,/=
- 案例Demo01:
package operator;
public class Demo01 {
public static void main(String\[\] args) {
//二元运算符
int a = 10;
int b = 20;
int c = 25;
int d = 25;
System.out.println(a + b);
System.out.println(a - b);
System.out.println(a \* b);
System.out.println(a/ (double)b);
}
}
- 案例Demo02:
package operator;
public class Demo02 {
public static void main(String\[\] args) {
long a = 123123123123123L;
int b = 123;
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
}
}
- 案例Demo03:
package operator;
public class Demo03 {
public static void main(String\[\] args) {
//关系运算符返回的结果:正确,错误 布尔值
int a = 10;
int b = 20;
int c = 21;
System.out.println(c % a); // c / a 21 / 10 = 2 ....1 取余数,模运算
System.out.println(a > b); //false
System.out.println(a < b); //true
System.out.println(a == b); //false
System.out.println(a != b); //true
}
}
自增自减运算符、初始Math类
package operator;
public class Demo04 {
public static void main(String\[\] args) {
// ++(自增) --(自减) 一元运算符
int a = 3;
int b = a++; //执行完这行代码后,先给b赋值,再自增
// a = a + 1;
System.out.println(a);
int c = ++a; //++a a = a + 1; 执行完这行代码前,先给自增,再c赋值
System.out.println(a);
System.out.println(b);
System.out.println(c);
//幂运算 2^3 2\*2\*2 = 8; 数学类:Math
double pow = Math.pow(2,3);
System.out.println(pow);
double pow1 = Math.pow(3,2);
System.out.println(pow1);
}
}
逻辑运算符、位运算符
package operator;
//位运算
public class Demo06 {
public static void main(String\[\] args) {
/\*
A = 0011 1100 B = 0000 1101\-------------------------------------------------------------------
A&B 0000 1100 如果两个都是1它就为1,否则都为0
A|B 0011 1101 如果都是0则为0,如果有一个1就为1
A^B 0011 0001 如果两个数值相同则为0,否则为1
~B 1111 0010 取反完全取反值
2\*8 怎么样运算最快 2\*2\*2\*2 <<左移
>>右移
0000 0000 代表0
0000 0001 代表1
0000 0010 代表2
0000 0011 代表3
0000 0100 代表4
0000 1000 代表8
0001 0000 代表16
\*/ System.out.println(2<<3);
}
}
三元运算符及总结
- 拓展运算符
package operator;
public class Demo07 {
public static void main(String\[\] args) {
int a = 10;
int b = 20;
a+=b; //a = a + b
a-=b; //a = a - b
System.out.println(a);
System.out.println(a);
//字符串连接符 +, String System.out.println(a+b);
System.out.println(""+a+b);
}
}
- 三元运算符
package operator;
public class Demo08 {
public static void main(String\[\] args) {
// x ? y : z
//如果x==true,则结果为y,否则为z
int results = 90;
int score = 80;
String type = score < 60 ? "不及格" : "及格";
System.out.println(type);
String type1 = results < 100 ?"不及格":"及格";
System.out.println(type1);
}
}
包机制
- 为了更好地组织类,Java提供了包机制,用于区别类名的命名空间。
- 包语句的语法格式为:
package pkg1[.pk2[.pk3....]];
- 一般利用公司域名倒置作为包名;
- 例如:www.baidu.com ==>com.baidu.www
- 为了能够使用某一个包的成员,我们需要在Java程序中明确导入该包。使用"import"语句即可完成此功能
import package1[.package2...].(classname|*);
IDEA中建包的时候如何才能把包分开
==================
原先我们创建包时输入com.atguigu.web时,idea只会有一个包。那么如何变成层级结构的两个包呢?
如上图在项目结构附近有小齿轮的图标,点击它会出现选择框把compact Middle Packages 这个选项取消勾选,这样就我们创建包时就会自动分层级。
这样我们用包扫描时,编译进target文件夹中的接口文件才会和xml映射文件才会在同一个包下。
JavaDoc生成文档
- Javadoc命令用来生成自己API文档
- 参数信息
- @author 作者名
- @version版本号
- @since指明需要最早使用的jdk版本
- @param参数名
- @return返回值情况
- @throws异常抛出情况