感谢B站狂神的学习资源,有兴趣的可以去搜索:遇见狂神说。
1.Java简介
1、java的特性和优势:
简单性、面向对象、可移植性、高能性、分布式、动态性、多线程、安全性、健壮性。
2、Java的三大版本:
- JavaSE:标准版(桌面程序,控制台开发……)
- JavaME:嵌入式开发(手机、小家电……)
- JavaEE:E企业级开发(Web端、服务器开发……)
3、Java安装与卸载开发环境
卸载JDK:删除JAVA_HOME;删除Java安装目录;删除path下关于java的目录;java -version验证。
jdk安装教程:https://blog.csdn.net/weixin_42132352/article/details/114348838。官网下载JDK8(选择JDK8,比较稳定),或者在地址这下载
IDEA2020.2安装:https://www.jb51.net/article/194557.htm
2.Hello World
编译运行Hello.java文件(cmd)
public class Hell0 {
/**
* @author --D
* @create 20210925
* 文档中注释JavaDoc
*/
public static void main(String[] args) {
System.out.println("Hello World!Java!"); // 单行注释
}
}
/*
多行注释
*/
$ javac Hello.java
:编译java文件,会生成一个java.class文件!$ java Hello
:运行java.class文件。
注意:文件名和类名必须保证一致,并且首字母大写,如:public class Hello{}。
3.标识符与关键字
1、标识符
- 所有的标识符都应该以字母(A-Z 或 a-z)、$、或下划线(_)开始;
- 首字符之后可以是字母(A-Z 或 a-z)、$、下划线(_)或数字的任何组合;
- 不能使用关键字作为变量名或方法名;
- 标识符是大小写敏感的;
- 可以使用中文命名,但是一般不建议这样去使用,也不建议使用拼音。
2、关键字
abstract | boolean | break | byte | case |
---|---|---|---|---|
catch | char | const | class | continue |
default | do | double | else | extends |
final | finally | float | for | goto |
if | implements | import | instanceof | int |
interface | long | native | new | package |
private | protected | public | return | short |
static | strictfp | super | switch | this |
throw | throws | transient | try | void |
volatile | while | synchronized |
4.数据类型
1、强类型语言、弱类型语言
Java是一种强类型语言。判断的根本:是否会隐形进行语言类型转变。
强类型语言:变量被定义类型后,如不经强制转换,它就永远是该数据类型。类型安全。如C、C++、Java、python等。
弱类型语言:变量类型可根据环境变化自动进行转换,不需要经过现行强制转换。类型不安全。如PHP、JavaScript、。
强类型语言在速度上可能略逊于弱类型语言,但是强类型定义语带来的严谨性又避免了不必要的错误。
2、动态类型语言、静态类型语言
动态语言与静态语言区分的根本:在运行期间去做数据类型检查,还是在编译期间检查。
动态类型语言:在运行期间做数据类型检查的语言。即动态类型语言编程时,永远不用给任何变量指定数据类型,该语言会在第一次赋值给变量时,在内部将数据类型记录下来。如:Python、JavaScript、PHP、Ruby等。
静态类型语言:在编译期间做数据类型检查的语言,即在写程序时要声明所有变量的数据类型,是固定的,如:C、C++、C#、Java等。
3、数据类型分类
Java的数据类型分为两大类:基本类型、引用类型。
8大基本数据类型:
- 数值类型:
- 整数类型:byte占1字节,short占2字节,int占4字节,long占8字节;
- 浮点类型:float占4字节,double占8字节;
- 字符类型:char占2字节;
- boolean类型:占1位其值只有tue和fase两个。
引用类型:类、接口、数组
public class Demo {
public static void main(String[] args) {
// 整数类型 & 进制的表示
int num1 = 10; // 最常用
long num4 = 40L; // Long类型要在数字后面加L
// 浮点类型:小数
float num5 = 50.1F; // float类型要在数字后面加F
double num6 = 3.1415926534546246455;
// 字符类型
char name = 'A'; // 单引号?只能有一个字符
// 布尔类型
boolean flag = true;
boolean flag2 = false;
// 类(字符串)
String names = "subeiLY"; // String是类,不是数据类型
}
}
4、数据类型扩展:
public class Demo03 {
public static void main(String[] args) {
// 整数拓展:二进制0b 十进制 八进制0 十六进制0x
int i = 10; // 十进制,最常用
int i3 = 010; // 八进制,前面加上0
int i4 = 0x10; // 十六进制(0~9,A~F),前面加上0x(x不区分大小写)
// 浮点数拓展
// 银行业务怎么表示?钱(BigDecimal 数学工具类)
// float(double) 有限 离散 舍入误差 大约 接近但不等于
// 避免使用浮点数进行比较
float f = 0.1f; // 0.1
double d = 1.0/10; // 0.1
System.out.println(f==d); // 输出false
float d1 = 2425444564215654564f;
float d2 = d1 + 1;
System.out.println(d1==d2); // 输出true
// 字符拓展
char c1 = 'a';
char c2 = '中';
System.out.println(c2);
System.out.println((int)c2); // 强制转换
// 所有字符的本质还是数字
// 编码,Unicode表:2字节('\u0000'-'\uFFFF'),65536
char c3 = '\u0061';
System.out.println(c3); // 输出a
// 转义字符:\u;\t 制表符;\n 换行
}
}
5.类型转换
Java是强类型语言。运算中,不同类型的数据先转化为同一类型,然后进行运算。进行有些运算时,需要用到类型转换。
// 低 ------------------------------------------------> 高
// byte -> short -> char -> int -> long -> float -> double
public class Demo {
public static void main(String[] args) {
int i = 128;
byte b = (byte)i; // b = -128,内存溢出;高->低,强制转换
double b1 = i; // b = 128.0;低容量->高容量,自动转换
/* 注意点:
1.不能对布尔类型转换
2.不能将对象类型转换为不相干的类型
3.在把高容量转换到低容量时,强制转换
4.转换的时候可能存在内存溢出,或者精度问题!
*/
}
}
常见问题:
public class Demo05 {
public static void main(String[] args) {
// 操作比较大时,注意溢出
int money = 10_0000_0000; // JDK7新特性,数字之间可以用下划线分割
int years = 20;
int total = money*years; // total = -1474836480,计算时溢出
long total2 = money*years; // total2 = -1474836480,这里先计算再转换
long total3 = money*(long)years; // 20000000000
}
}
6.变量与常量
1、变量:可以变化的量。Java变量是程序中最基本的存储单元,三要素:变量名,变量类型和作用域。
2、注意事项:
Java是一种强类型语言,每个变量都必须声明其类型(类型可以是基本类型,也可以是引用类型)。
变量名必须是合法的标识符;变量声明是一条完整的语句,每一个声明都必须以分号结束。
3、变量作用域:类变量、实例变量、局部变量
public class Demo07 {
// 1、类变量,在类里,有关键字static
static double salary = 3000;
// 2、实例变量,在类里。从属于对象,需要通过类使用。
// 如果不初始化,有默认值:null、0、0.0、False。除了基本类型,其余的都是null
String name;
public void method(){
int i = 0; // 3、局部变量,在方法中。必须声明和初始化值
}
// main 方法
public static void main(String[] args) {
System.out.println(salary); // 类变量 static
Demo07 demo07 = new Demo07();
System.out.println(demo07.name); // 实例变量,输入null
}
}
4、变量的命名规范:
- 所有变量、方法、类名:见名知意;
- 类成员变量:首字母小写和驼峰原则:monthSalary;
- 局部变量:首字母小写和驼峰原则;
- 方法名:首字母小写和驼峰原则:run(),runRun()。
- 类名:首字母大写和驼峰原则:Man, GoodMan;
- 常量:大写字母和下划线:MAX_VALUE;
5、常量( Constant):初始化( initialize)后不能再改变值!
常量名一般使用大写字符。所谓常量可以理解成一种特殊的变量,它的值被设定后,在程序运行过程中不允许被改变。
public class Demo08 {
// final:修饰符,和static不存在先后顺序
static final double PI = 3.14;
public static void main(String[] args) {
System.out.println(PI); // 因为static,所以PI可在这用
}
}
7.基本运算符
Java语言支持如下运算符:
- 算术运算符:+,-,*,/,%,++,–
- 赋值运算符: =
- 关系运算符:>,≤,>=,<=,==,!=,instanceof
- 逻辑运算符:&&,‖,!
- 位运算符:&,|,A,~,>>,<<,>>>(了解!!!)
- 条件运算符: ?:
- 扩展赋值运算符:+=,-=,*=,/=
package operator;
public class Demo01 {
public static void main(String[] args) {
// ctrl+D:复制当前行到下一行
long a = 123123123123123L;
int b = 123;
short c = 10;
byte d = 8;
// 1、二元运算符
System.out.println(a+b+c+d); // long
System.out.println(b+c+d); // int
System.out.println(c+d); // int,整数间进行运算,没有long时,short和byte会转为int类型
System.out.println((double)c+d);
// 2、幂运算 2^3
double pow = Math.pow(2,3);
System.out.println(pow);
// 3、位运算符
// A = 0011 1100
// B = 0000 1101
// A^B = 0011 0001 异或
// 面试提:2*8 = 16,怎么运算最快?2*2*2*2,效率极高!!
System.out.println(2<<3); // <<表示乘2,>>表示除2
// 4、字符串连接符 +,String
System.out.println(""+c+d); // 输出108,""先和a拼接,再和b拼接,a+b不进行算术运算
System.out.println(c+d+""); // 输出18,a+b先进行算术运算,再和""拼接
}
}
8.包机制
为了更好地组织类,Java提供了包机制,用于区别类名的命名空间。
包语句的语法格式为:package pkg1[. pkg2[. pk...]];
一般利用公司域名倒置作为包名,如:com.baidu.www。(在src下新建包)
为了能使用某一个包的成员,需要在导入该包。语法:import package1[. package..].(classname |*);
9.JavaDoc
javadoc -encoding UTF-8 -charset UTF-8 Doc.java // (cmd下)用来生成自己API文档的
参数信息:
@ author作者名
@ version版本号
@ since指明需要最早使用的jdk版本
@ paran参数名
@ return返回值情况
@ throws异常抛出情况