感谢B站狂神的学习资源,有兴趣的可以去搜索:遇见狂神说。
1、java的特性和优势:
简单性、面向对象、可移植性、高能性、分布式、动态性、多线程、安全性、健壮性。
2、Java的三大版本:
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
编译运行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{}。
1、标识符
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 |
1、强类型语言、弱类型语言
Java是一种强类型语言。判断的根本:是否会隐形进行语言类型转变。
强类型语言:变量被定义类型后,如不经强制转换,它就永远是该数据类型。类型安全。如C、C++、Java、python等。
弱类型语言:变量类型可根据环境变化自动进行转换,不需要经过现行强制转换。类型不安全。如PHP、JavaScript、。
强类型语言在速度上可能略逊于弱类型语言,但是强类型定义语带来的严谨性又避免了不必要的错误。
2、动态类型语言、静态类型语言
动态语言与静态语言区分的根本:在运行期间去做数据类型检查,还是在编译期间检查。
动态类型语言:在运行期间做数据类型检查的语言。即动态类型语言编程时,永远不用给任何变量指定数据类型,该语言会在第一次赋值给变量时,在内部将数据类型记录下来。如:Python、JavaScript、PHP、Ruby等。
静态类型语言:在编译期间做数据类型检查的语言,即在写程序时要声明所有变量的数据类型,是固定的,如:C、C++、C#、Java等。
3、数据类型分类
Java的数据类型分为两大类:基本类型、引用类型。
8大基本数据类型:
引用类型:类、接口、数组
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 换行 } }
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 } }
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、变量的命名规范:
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可在这用 } }
Java语言支持如下运算符:
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先进行算术运算,再和""拼接 } }
为了更好地组织类,Java提供了包机制,用于区别类名的命名空间。
包语句的语法格式为:package pkg1[. pkg2[. pk...]];
一般利用公司域名倒置作为包名,如:com.baidu.www。(在src下新建包)
为了能使用某一个包的成员,需要在导入该包。语法:import package1[. package..].(classname |*);
javadoc -encoding UTF-8 -charset UTF-8 Doc.java // (cmd下)用来生成自己API文档的
参数信息:
@ author作者名
@ version版本号
@ since指明需要最早使用的jdk版本
@ paran参数名
@ return返回值情况
@ throws异常抛出情况