JAVA -01(简单知识介绍)
JAVA -01
前期准备
介绍
- 1972年C诞生【两大问题:指针;内存管理】
- 1982年C++诞生【面向对象;兼容C;图形领域和游戏,但是更复杂】
- 1995年JAVA诞生【没有指针没有内存管理;面向对象;类型安全;高质量类库;跨平台(JVM实现);applet图形界面程序】
小碎点
- 三高问题:高可用、高性能、高并发
Java特性
- 简单性【易学】
- 面向对象
- 可移植性【一次编写多次运行】
- 高性能【及时编译】
- 分布式【TCP/IP处理、URL调用、远程调用】
- 动态性【反射机制】
- 多线程【交互、实时】
- 安全性【防病毒、防篡改、异常机制】
- 健壮性
- 既是编译型又是解释型语言
11. 大小写敏感
Java的三大版本
- JavaSE:标准版(桌面程序、控制台开发)
- JavaME:嵌入式开发(手机、小家电)
- JavaEE: 企业级开发(web端、服务器开发)
JDK、JRE、JVM
1. JDK:Java Development Kit 【Java开发包】
2. JRE:Java Runtime Environment 【Java运行时环境】
3. JVM:Java Virtual Machine 【Java虚拟机】
JDK7和JDK8之间的区别
JDK7
- JDK7新特性,数字之间可以用下划线分割
JDK8
JDK卸载
- 删除安装目录
- 删除环境变量配置JAVA_HOME
- 删除path下的关于java的目录
- java -version检查
JDK安装
- 百度搜索jdk8,找到下载地址
- 同意协议、下载对应版本安装包
- 双击安装
- 安装目录建议找易找到的,并记住安装路径
- 配置环境变量
- 我的电脑 --->右键 --->属性 --->高级系统设置
- 环境变量 --->系统变量 --->新建系统变量--->JAVA_HOME--->安装路径
- 配置path变量
- 系统变量里面找到path --->新建%JAVA_HOME%\bin --->新建%JAVA_HOME%\jre\bin
- 打开cmd ---> java -version 检查,出现安装的版本及成功
控制台输出HelloWorld【第一个java程序】
-
新建一个文件【文件名HelloWorld文件名和文件里的class后面的要一致】,将后缀改为.java
-
在里面编写代码
-
public class HelloWorld{ //HelloWorld与文件名一致 public static void main(String[] args){ System.out.println("Hello,World!"); } }
-
控制台进到文件目录,进行编译
-
javac HelloWorld.java
-
运行
-
java HelloWorld
-
使用IDEA开发
-
下载安装包,安装
-
安装时需要根据电脑版本选择是 “.32” 还是 “.64” ,还有勾选 ".java" 。
-
破解
使用IDEA快捷键
1、psvm + enter 可以快速补充
public static void main(String[] args) {
}
2、sout + enter 可以快速补充
System.out.println();
3、Ctrl + d 复制当前行到下一行
Java基础语法
注释
1、//单行注释 //
2、//多行注释 /* 注释 */
3、//JavaDOC /** 文档注释 */
标识符【关键字】
1、所有标识符首字母必须以字母(A-Z,a-z),美元符号($),下划线(—)开始
2、首字母之后可以任意
3、大小写敏感
4、不能使用关键字作为变量名和方法名
5、String不是关键字,是一个类
数据类型
1、java是强类型语言【变量使用复合类型且必须先定义再使用】
2、两大类【基本类型、引用类型】
3、primitive type 基本类型 【byte(1B)、short(2B)、int(4B)、long(8B)、float(4B)、double(8B)、char(2B)、boolean(1b)】【long类型要在后面加上L,float要在后面加F】
4、reference type 引用类型 【类、接口、数组】
public class Demo01 {
public static void main(String[] args) {
//====================================================
//int型 【int(4B)】
//====================================================
int i = 10;
int i2 = 010; //八进制0
int i3 = 0x10; //十六进制 0x
System.out.println(i);
System.out.println(i2);
System.out.println(i3);
System.out.println("====================");
//====================================================
//float型 && double型 【float(4B)、double(8B)】
//====================================================
float f = 0.1f;
double d = 1.0/10;
System.out.println(f);
System.out.println(d);
System.out.println(f==d);
System.out.println("====================");
//====================================================
//浮点数拓展? 银行业务怎么表示?钱
//BigDecimal 数学工具类
//====================================================
//float 有限 离散 舍入误差 大约 接近但不等于
//最好完全避免使用浮点数标记!!!
//最好完全避免使用浮点数标记!!!
//最好完全避免使用浮点数标记!!!
float d1 = 23169541465661f;
float d2 = d1 + 1 ;
System.out.println(d1==d2);
System.out.println(d1);
System.out.println(d2);
System.out.println("====================");
//====================================================
//char型 【char(2B)】
//字符拓展?
//所有字符本质还是数字 编码 Unicode 2字节 0-65536 Excel 2^16 = 65536
//====================================================
char c1 = 'a';
char c2 = '中';
System.out.println(c1);
System.out.println((int)c1);
System.out.println(c2);
System.out.println((int)c2);
System.out.println("====================");
//转义字符
// \t 制表符 tab
// \n 换行
System.out.println("hello\thello");
System.out.println("hello\nhello");
System.out.println("====================");
//====================================================
//boolea型 【boolean(1b)】
//====================================================
boolean flag = false;
if(flag == true){ } //新手
if(flag){} //老手
//上面两个if判断功能一致
//====================================================
//String 不是数据类型,它是一个类!!!!!!
//====================================================
String s1 = new String("nihao");
String s2 = new String("nihao");
String s3 = "nihao";
String s4 = "nihao";
System.out.println(s1==s2);
System.out.println(s3==s4);
System.out.println("====================");
}
}
自己找找看有哪些转义符?
位
- 位(bit):计算机内部最小存储单位
- 字节(byte):计算数据处理基本单位,习惯B表示
- 1B = 8bit
类型转换
注意点:
1、不能对boolean类型进行转换
2、不能将最想类型转换为不相干的类型
3、转换的时候可能存在内存溢出、或者精度问题
强制转换 高到低 (类型)变量名
低--->高:byte , short , char , int ,long , float , double
自动类型转换 低到高【不需要处理】
package base;
public class Demo02 {
public static void main(String[] args) {
//强制转换 高到低 (类型)变量名
//自动类型转换 低到高
int i = 128;
byte b = (byte)i; //内存溢出
double d = i;
System.out.println(i);
System.out.println(b);
System.out.println(d);
System.out.println("===============================");
System.out.println((int)23.7);
System.out.println((int)-45.75f);
System.out.println("===============================");
char c = 'a';
int i2 = c+1;
System.out.println(i2);
System.out.println((char)i2);
System.out.println("===============================");
//操作比较大的数,注意溢出
//JDK7新特性,数字之间可以用下划线分割
int money = 10_0000_0000;
int years = 20;
int total = money*years; //负数,计算溢出
long total2 = money*years; //负数,计算之后转换为long类型,同样会溢出
long total3 = money*((long)years); //先将years强转为long,再计算
System.out.println(total);
System.out.println(total2);
System.out.println(total3);
/*
小写的L(即l)也可以,但是在编写软件里,他和1非常相似,为避免认错,代码规范易读都用L来标记long类型
*/
}
}
变量、常量、作用域
注意点:
1、每个变量都要有类型
2、变量名必须是合法的标识符
3、变量生命是一条完整的语句,所以必须以分号结束
4、不建议一行定义多个变量
- 类变量:加了static关键字
- 实例变量:从属于对象,在类中有效,可以不初始化就使用,会有默认值【boolean默认false ,除了基本类型其余的是null】
- 局部变量:使用之前必须实例化并赋值,作用域只在它声明的方法内部有用(即它所在的{}内有用)
package base;
public class Demo03 {
//变量 type varName [=value][{varName[=value]}];
//常量一般用大写 final
static double salary = 2500;
String name;
int age;
//修饰符不存在先后顺序
static final double PI = 3.14;
public static void main(String[] args) {
int i = 10;
System.out.println(i);
Demo03 demo = new Demo03();
System.out.println(demo.name);
System.out.println(demo.age);
System.out.println(salary);
System.out.println(PI);
}
//外部方法
public void add(){
//***
}
}
运算符
算数运算符:+ - * / %(取余/模) ++(自增,一元运算符) --(自减,一元运算符)
赋值运算符:=
关系运算符:> < >= <= == != instanceof
逻辑运算符:&& || !
位运算符:& | ^ ~ >> << >>>(了解!!!)
条件运算符:? :
扩展赋值运算符:+= -= *= /=
package base;
public class Demo04 {
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);
System.out.println("================================");
long aa = 123123123123L;
int bb = 123;
short cc = 10;
byte dd = 8;
System.out.println(aa+bb+cc+dd); //long 最高
System.out.println(bb+cc+dd); //int
System.out.println(cc+dd); //int
System.out.println("================================");
//关系运算符返回结果 true false
int a2 = 10;
int b2 = 20;
int c2 = 21;
System.out.println(a2>b2);
System.out.println(a2<b2);
System.out.println(a2==b2);
System.out.println(a2!=b2);
System.out.println(c2%b2);
System.out.println("================================");
//一元运算符 ++ --
int x = 1; //x=1
int y = x++; //y=1,x=2【先将x赋给y,在x+1】
System.out.println(x); //x=2
int z = ++x; //x=3【先x+1,再将x赋给z】
System.out.println(x);
System.out.println(y);
System.out.println(z);
System.out.println("================================");
//幂运算 2^3 = 8 很多运算,需要使用工具类
double m = Math.pow(2,3);
System.out.println(m);
System.out.println("================================");
//逻辑运算符
boolean f1 = true;
boolean f2 = false;
System.out.println(f1&&f2);
System.out.println(f1||f2);
System.out.println(!(f1&&f2));
System.out.println("================================");
扩展赋值运算符
int xy = 10;
int xz = 20;
a+=b; //a=a+b
a-=b; //a=a-b
System.out.println(a+b);
//三元运算符
//xx ? yy : zz 如果xx为真则结果为yy,否则结果为zz
int score = 80;
String type = score < 60 ? "不及格" : "及格";
System.out.println(type);
/*
运算符的优先级,一元运算符最优
*/
}
}
运算符优先级
短路原则
boolean f1 = true;
boolean f2 = false;
//短路原则
System.out.println(f2&&f1); //因为逻辑与是全为真则结果为真,所以在判断法等于false时,就不会再执行f1的判断了
//验证短路原则
int flag = 5;
boolean f3 = (flag < 4)&&(flag++ < 4);
System.out.println(f3);
System.out.println(flag);
System.out.println("================================");
位运算 效率高【跟底层二级制打交道】
<< **左移 ** 相当于*2
>> **右移 ** 相当于/2
/*
A = 0011 1100
B = 0000 1101
A&B = 0000 1100 全为1,则为1
A|B = 0011 1101 都为0,则为0
A^B = 0011 0001 异或 相同则为0,否则为1
~B = 1111 0010 取反
2*8 = 16 = 2*2*2*2
<< 左移 相当于*2
>> 右移 相当于/2
0000 0001 1
0000 0010 2
0000 0011 3
0000 0100 4
0000 0101 5
0000 0110 6
0000 0111 7
0000 1000 8
0001 0000 16
*/
System.out.println(2 << 3);
System.out.println("===============================");
面试题
- new对象,判断是否相等
String s1 = new String("nihao");
String s2 = new String("nihao");
String s3 = "nihao";
String s4 = "nihao";
System.out.println(s1==s2);
System.out.println(s3==s4);
输出结果:
flash
true
- 字符串连接符 + ,String
System.out.println(" "+a+b);和System.out.println(a+b+" ");输出区别
前者输出1020,后面的a+b中的+变成了连接符
后者输出30,a+b里面的+是运算符
int a = 10;
int b = 20;
System.out.print("\" \"+a+b:");
System.out.println(" "+a+b);
System.out.print("a+b+\" \"
System.out.println(a+b+" ");
输出结果:
" "+a+b:1020
a+b+" ":30
- ++位置
y = x++;和z = ++x;输出区别(各自结果)
int x = 1; //x=1
int y = x++; //y=1,x=2【先将x赋给y,在x+1】
System.out.println(x); //x=2
int z = ++x; //x=3【先x+1,再将x赋给z】
System.out.println(x); //3
System.out.println(y); //1
System.out.println(z); //3
输出结果:
3
1
3
命名规范
- 见名知意
- 类名:首字母大写和驼峰原则
- 常量:全部大写,单词之间下划线
- 类成员变量:首字母小写和驼峰原则(除首字母外,之后的单词首字母大写)
- 局部变量:首字母小写和驼峰原则
- 方法名:首字母大写和驼峰原则
包机制
-
为了更好地组织类
-
一般利用公司与组织的倒名作为包名(http://baidu.com就是com.baidu)
-
import 导包
-
防止命名空间重复
JavaDOC
-
Javadoc命令是用来生成自己的API文档
-
可用的参数信息:
- @author 作者名
- @version 版本号
- @since 知名需要最早使用的jdk版本
- @param 参数名
- @return 返回值情况
- @throws 异常声明情况
-
cmd输出API帮组文件方式
进到文件位置(namespace位置)
javadoc -encoding UTF-8 -charset UTF-8 文件名.java【要生成API的java类名】