1. 准备
- IDE(使用开源的eclipse)
https://www.eclipse.org/downloads/ - 下载jdk + 配置环境变量
(JDK是java开发工具包,这个安装好以后,就可以运行Java了)
https://www.oracle.com/technetwork/java/javase/downloads/index.html
ps:在安装过程中还要安装JRE,JRE是Java运行环境, 安装它,才能使Eclipse,Jbulilder等IDE工具可以正常使用。安装完jdk之后,会弹出jre的安装界面。
2. 理解
2.1
- java:这个可执行程序其实就是JVM,运行Java程序,就是启动JVM,然后让JVM执行指定的编译后的代码;
命令行:编译(javac xxx.java)运行(java xxx)【xxx为你命名java主类】 - javac:这是Java的编译器,它用于把Java源码文件(.java)编译为Java字节码文件(.class);
- jar:用于把一组.class文件打包成一个.jar文件,便于发布;
- javadoc:用于从Java源码中自动提取注释并生成文档;
- jdb:Java调试器,用于开发阶段的运行调试;
- javap: 反编译,将类文件还原回方法和变量;
- appletviwer : Java解释器, 用来解释已经转换成Bytecode的java小应用程序;
2.2 java版本
(1)Java标准版(J2SE, Java Standard Edition)
定位在个人计算机上的应用。这个版本是Java平台的核心,它提供了非常丰富的API来开发一般个人计算机上的应用程序,包括用户接口AWT及Swing,网络功能与国际化、图像处理能力以及输入输出支持等。在互联网上大放异彩的Applet也属于这个版本。
ps:是用于创建典型的桌面与工作站应用的Java平台。从配置上来说,只要安装JDK(Java Development Kit),就建立了一个J2SE开发和运行平台。
(2)Java企业版(J2EE, Java Enterprise Edition)
定位在服务器端的应用。相关技术有EJB 、JDBC、、Servlet、JSP、XML、email及transaction、Struts、Spring、Hibernate以及Ajax等等。
(3)Java微型版(J2ME, Java Micro Edition )
定位在消费性电子产品的应用上。这个版本的应用层面相当广泛,比如呼机、智能卡、手机、PDA,机顶盒。会是未来Java平台发展的重点项目。
2.3 java的特点
(1)Java是健壮的
Java的代码 具有可靠性。Java丢弃了容易引起错误的数据类型,如指针等。并且在Java编译过程中,对很多可能发生的错误进行了防范。并可进行实时异常处理。
(2)Java是安全的
Java执行多种安全机制用以保护系统不受恶意程序的破坏。
(3) Java是可移植的
Java的字节码可以直接移植到不同的操作系统上运行。
(4)Java的效率
Java的效率不如C++快,但足以满足大多数交互应用程序的要求。实时编译技术。
(5)Java是多线程的
多线程技术常用于用户图形界面和网络中。
(6)Java动态的
不需要重新编译就可以加入新类。增强了软件更新的能力。
3. get语法知识
“基本类型”和“引用类型”的区别主要在于基本数据类型是分配在栈上的,而引用类型是分配在堆上的。
3.1 基本数据类型
- 整数类型:byte,short,int,long
(1) byte:-128 ~ 127 (1byte = 8bit)
(2) short: -32768 ~ 32767
(3) int: -2147483648 ~ 2147483647
(4) long: -9223372036854775808 ~ 9223372036854775807 - 浮点数类型:float,double
浮点数的运算常常会存在误差,应特别注意,特别是在进行比较两个浮点数的时候,最好将差的绝对值与一个很小的数比较。
ps:浮点数0.1在计算机中就无法精确表示,因为十进制的0.1换算成二进制是一个无限循环小数。
- 字符类型:char
char类型除了可表示标准的ASCII外,还可以表示一个Unicode字符
\uxxx 表示一个Unicode编码的字符(通常用unicode编码的字符可以验证汉字)
ps:java采用utf-16
字符集(https://blog.csdn.net/qq_33414271/article/details/78519159 )
理论上第三个应该是ok的,这里先填个坑。
- 布尔类型:boolean
3.2 引用数据类型(待扩充)
-
类
(1)包装类:将基本数值类型处理为对象。
(由于效率的原因Java中的基本数据类型不作为对象使用。
然而,许多Java中的方法需要对象作为参数。
(例如,集合类ArrayList x = new ArrayList(); x.add(17); )
Java提供了一个方法,可将基本数据类型并入对象或包装成对象。)
Boolean:
Character:
Short:
Byte:
Integer:
1)字符串转数值Integer.parseInt()/Integer.valueOf()
数值转字符串Integer.toString()/String.valueOf()/String.format("%d",i)
2)BigInteger的应用
https://blog.csdn.net/qq_42677329/article/details/89395088
Long:
Double:
ps:- 每一个包装类覆盖了Object类中定义的toString, equals, 和 hashCode方法。
- 因为所有的数值包装类实现了 Comparable 接口, 所以这些类中都实现了compareTo方法。
- 等于‘==’和‘!=’运算符两端作用于包装类时,是引用比较。一律使用equals进行值比较。
- 包装类没有无参构造方法
所有包装类对象一旦创建,其内部的值就不可以再改变了。 - JDK 允许基本数据类型和包装类之间的自动转换。
(2)String类
区别于类StringBuffer和StringBuilder :可变字符串类,创建该类的对象后,可以随意修改,变更字符串的内容。在多线程共享操作中使用StringBuffer,否则使用StringBuilder,效率更高。
正则的使用 :导入java.util.regex.Matcher;java.util.regex.Pattern
(https://www.runoob.com/java/java-regular-expressions.html )
get:
.代表任何字符
代表0个或多个
\d代表数字:[0-9],使用时应该是[\\d]
[\d][02468]
构造方法 :
ps:-
String继承Object,实现Comparable接口。它重写了父类的某些方法,包括equals()方法,hashCode(),toString()等方法。
-
实现了Comparable接口的compareTo()方法
-
对String而言,==用来比较引用是否相等,equals用来比较内容是否相等。
(3)Math类
Math.PI 常量π
Math.random() 获得0-1范围内的一个随机数
Math.sin(x)
Math.pow(a,b) 返回a的b次方
Math.sqrt(x)
Math.max(a,b)
ps:当利用随机数时候若要用int类型的强制转换时,注意是(int)(Math.random()*10),若写成(int) Math.random()10,后者是先强制转换再10,故任何时候这个结果都是0.
(4)Date类
- 比较日期
1.getTime() 方法获取两个日期
2.before(),after() 和 equals()
3.compareTo() 方法
Calender类
- 接口
- 数组
(1)数组的复制
用循环语句逐个复制数组的元素
使用System类中的静态方法arraycopy
使用clone方法复制数组
(2)其他操作 import java.util.Arrays;
排序:sort()
填充:fill()
复制:copyof ()
比较:equals ()
查找:binarySearch () - 枚举
- 注解
4. 方法的访问修饰符
-
public :不仅允许跨类访问,而且允许跨包访问。
-
default :即不加任何访问修饰符(称为”默认访问方式”),允许在同一个包中访问。
-
protect : 允许在任何子类中或在同一个包中访问,相当于protect 或 default。
-
private : 只允许本类成员访问。
-
static :用static修饰的方法称为静态方法,该方法是属于类的。使用静态方法可以在不创建类对象的情况下,直接使用类名调用。注意,静态方法中不能直接使用非静态成员。
-
final :使用该关键字定义的方法被称为最终方法,它不能在子类重写(override,动态绑定),但能重载(overload,静态绑定)。
ps :
1)这些访问修饰符同样可用来修饰成员变量。
2)重载:相同函数名但参数个数、参数类型不完全相同。
5.封装、继承、多态
1)子类也可叫做特殊类、派生类,基类也可叫做一般类、超类。
2)通过一个变量访问对象的方法时(向对象发送消息),究竟访问的是哪一个类中的方法(由于变量的多态性,编译器不能确定),由该变量此时所引用的是哪一个类的对象来决定(运行时JVM确定实际类型)。(产生方法多态性)
3)继承:extends 关键字
4) super关键字指向直接父类:
- 调用父类的构造方法 :super();或super(参数)
- 调用父类的方法 :super.方法名(参数)
6.抽象类
当一个类中包含了抽象的方法(关键字abstract),此类就被认为是一个抽象类,此时该类就不能被实例化了。
将抽象类进行的更加彻底,即是接口(关键字interface),接口里不能包含普通方法,接口里所有的方法都是抽象方法。
接口的主要用途就是被实现类实现。一个类可以实现一个或是多个接口,继承使用extends关键字,实现则使用implements关键字。
匿名类
7.泛型generic
泛型类、泛型接口、泛型方法。
好处:
①在编译的时候检查类型安全
②并且所有的强制转换都是自动和隐式的
③提高代码的重用率。
7.1泛型类通常是各种容器类set、map、List
- 泛型的类型参数只能是类类型
- 另:
- 传入泛型实参和未传入泛型实参时的写法差异
- 泛型方法
- 用通配符?实现泛型数组
8.异常类
异常类继承体系
-
Error:一般是指虚拟机相关的问题,如系统崩溃、虚拟机出错误、动态链接失败等。这种错误无法恢复或不可能捕获,将导致应用程序中断。
-
Exception:由程序和外部环境引起的错误,这些错误能通过程序捕获和处理。
9. IO
10、线程
get小知识(持续更)
- NaN表示Not a Number
- Infinity表示无穷大
- -Infinity表示负无穷大
- Java没有给方法中的局部变量赋予默认值
- java支持内部类
- 获取字符串的长度用length();而获取集合的长度用size();获取数组的长度用length;
- 悬空else时,else总是与最靠近的if 相匹配
- 一旦一个数组被创建,其长度就确定了,不能被修改
- Java类只能有一个直接的父类。但实际上, Java类可以有无限多个间接父类。
- this是消息[该方法]的接收对象[目标对象],而super则是this对象的父对象。
- String对象本质上就是一个字符数组(参见源码)
- final修饰的类不能被继承,final修饰的方法不能被重写
- 接口中声明的常量默认为public static final,接口里的方法总是使用public abstract修饰
- 进行异常捕获的时候,一定要记住先捕获小的异常,再捕获大的异常
- Thread.sleep(1000*3); // 休眠3秒
- Java 的内存回收可以由 JVM 来自动完成。如果你手动使用finalize() 方法
- 有时候你希望运行一个程序时候再传递给它消息。这要靠传递命令行参数给main()函数实现。