Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
java官网下载地址上找到对应的版本下载,本文以windows、liunx、jdk1.8.0_151
为例。
下载完之后傻瓜式安装就好,默认目录C:\Program Files\Java\
。
windows: 此计算机->右键到属性->高级系统设置->环境变量
添加用户变量:
变量名:JAVA_HOME
,变量值:C:\Program Files\Java\jdk1.8.0_151
变量名:CLASSPATH
,变量值:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
添加系统变量path:
%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
,记得前后分号
liunx: 将下载好的压缩包解压到指定目录,我这里用的是/usr/local/java,解压完成后打开vi /usr/profile 添加如下内容
#set java environment JAVA_HOME=/usr/local/java/jdk1.8.0_151 JRE_HOME=/usr/local/java/jdk1.8.0_151/jre CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin export JAVA_HOME JRE_HOME CLASS_PATH PATH
最后在cmd窗口或者liunx上执行java -version能出现对应的版本表示安装成功。
特点: 一处编译,多处执行,跨平台,安全性(1.摒弃指针 2、GC垃圾回收机制:(自动释放回收长时间不使用对象的内存))
结构:JDK & JRE & JVM
关键字 | 含义 |
---|---|
abstract | 表明类或者成员方法具有抽象属性 |
assert | 断言,用来进行程序调试 |
boolean | 基本数据类型之一,声明布尔类型的关键字 |
break | 提前跳出一个块 |
byte | 基本数据类型之一,字节类型 |
case | 用在switch语句之中,表示其中的一个分支 |
catch | 用在异常处理中,用来捕捉异常 |
char | 基本数据类型之一,字符类型 |
class | 声明一个类 |
continue | 回到一个块的开始处 |
default | 默认,例如,用在switch语句中,表明一个默认的分支。Java8 中也作用于声明接口函数的默认实现 |
do | 用在do-while循环结构中 |
double | 基本数据类型之一,双精度浮点数类型 |
else | 用在条件语句中,表明当条件不成立时的分支 |
enum | 枚举 |
extends | 表明一个类型是另一个类型的子类型。对于类,可以是另一个类或者抽象类;对于接口,可以是另一个接口 |
final | 用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变,用来定义常量 |
finally | 用于处理异常情况,用来声明一个基本肯定会被执行到的语句块 |
float | 基本数据类型之一,单精度浮点数类型 |
for | 一种循环结构的引导词 |
if | 条件语句的引导词 |
implements | 表明一个类实现了给定的接口 |
import | 表明要访问指定的类或包 |
instanceof | 用来测试一个对象是否是指定类型的实例对象 |
int | 基本数据类型之一,整数类型 |
interface | 接口 |
long | 基本数据类型之一,长整数类型 |
native | 用来声明一个方法是由与计算机相关的语言(如C/C++/FORTRAN语言)实现的 |
new | 用来创建新实例对象 |
package | 包路径 |
private | 一种访问控制方式:私用模式 |
protected | 一种访问控制方式:保护模式 |
public | 一种访问控制方式:共用模式 |
return | 从成员方法中返回数据 |
short | 基本数据类型之一,短整数类型 |
static | 表明具有静态属性 |
strictfp | 用来声明FP_strict(单精度或双精度浮点数)表达式遵循[IEEE 754](https://baike.baidu.com/item/IEEE 754)算术规范 |
super | 表明当前对象的父类型的引用或者父类型的构造方法 |
switch | 分支语句结构的引导词 |
synchronized | 表明一段代码需要同步执行 |
this | 指向当前实例对象的引用 |
throw | 抛出一个异常 |
throws | 声明在当前定义的成员方法中所有需要抛出的异常 |
transient | 声明不用序列化的成员域 |
try | 尝试一个可能抛出异常的程序块 |
void | 声明当前成员方法没有返回值 |
volatile | 表明两个或者多个变量必须同步地发生变化 |
while | 用在循环结构中 |
一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:
1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。
2)禁止进行指令重排序。
数组、类型、接口。
级别从低到高为:byte、char、short(平级)->int->float->long->double
java中整型初始值默认0,浮点型默认0.0,布尔类型默认false,引用数据类型默认null
lang包下的String类,是不可以被继承的。
==在基础数据类型比较时,比较的是他们的值。在复合数据类型时(类、对象),比较的是他们内存中的存放地址。
equals方法,默认是比较对象的内存地址,但是一些类中已被覆盖,比较两个对象的内容是否相同。
//例如: 25左移两位 25 << 2 25二进制 0001 1001 左移两位低位补零 0110 0100 最终结果100 //小技巧 x << y x*2的y次方,此处^为数学符号 25*2^2 25*4=100
//例如:25右移两位 25 >> 2 25二进制 0001 1001 右移两位高位正数补零 0000 0110 最终结果6 //小技巧 x << y x/2的y次方,此处^为数学符号 25/2^2 25/4=6
//例如 25 & 98 = 0 25 二进制 0001 1001 98 二进制 0110 0010 结果得 0000 0000 = 0 //例如 27 & 98 = 2 27 二进制 0001 1011 结果得 0000 0010 = 2
先定义、开辟空间、赋值在使用。java数组长度不可变
数组的定义:
String[] str0=null;//定义
String[] str1=new String[4];//定义并开辟空间
String[] str2={"A","B","C","D"};
String[] str3=new String[]{"A","B","C"};
数组的复制:
System.arraycopy(str1,0,str2,0,1);//从左到右参数意义:从哪个数组,从哪开始复制,复制到哪?开始位置,复制多长 System.out.println("copyOf:"+Arrays.toString(Arrays.copyOf(str1, 3)));
Arrays.sort(strArr1); //自己实现 ArrayList.sort 重写Comparator方法
class 类名{ 属性 方法 } 使用关键字new可以创建类对象,使用过类.属性或者类.方法完成调用
1.先将指定位置的class文件加载进内存 2.执行启动main方法时,在栈内存中开辟了main方法的空间(压栈-进栈),然后在main方法的栈区分配一个变量p 3.new关键字向堆内存中申请开辟一个了实体空间,分配一个内存首地址值 4.在该实体空间中进行属性的空间分配,并进行了默认初始化 5.对空间中的属性进行显示初始化 6.进行实体的构造代码块初始化 7.调用该实体的构造方法,进行构造方法初始化 8.将首地址赋值给p,p变量就引用了该实体,指向了该对象
1.抽象方法只能定义在抽象类中, 抽象类和抽象方法必须有abstract关键字修饰(不可以修饰变量) 2.抽象方法只定义方法声明,并不实现,非抽象的方法也可以正常定义 3.抽象类不可以被实例化(new),因为存在不具体的方法,没法分配准确的内存 4.只有通过子类继承并实现抽象类中所有的抽象方法后,该子类才可被实例化,否则子类就也是一个抽象类
1.抽象类是否能被实例化? 上面第三点有讲 2.抽象类是否有构造方法? 有,供子类给对象初始化 3.抽象类是否一定要定义抽象方法? 不一定,抽象代表不具体不确定,有抽象方法是为了让子类更好的实现 4.抽象关键字abstract和哪些关键字不能共存? final, private, static 5.抽象类中可以有普通成员变量 6.抽象类中可以有普通静态方法
1.接口是特殊抽象类,所有方法都是抽象方法(1.8以后可以定义普通有方法体的方法),数据成员都是public static final 2.接口不能被实例化,方法虽然省略abstract关键字,单实际上还是抽象方法 3.接口里面的变量都是常量,且不可更改 4.接口只能通过implements来实现,一个实现类,可以实现多个接口,实现需要重新所有的抽象方法 5.接口可以继承接口 6.接口中没有构造方法
1.java由于单继承,接口可以弥补无法多继承的缺点 2.高内聚低耦合,接口可以实现解耦 3.一种规范
1.抽象类只能被继承,而且只能被单继承 2.接口需要被实现,且可以多实现 3.抽象类中可以定义非抽象方法,子类继承后可以直接使用 4.接口中都有抽象方法,需要子类实现
其他的自行了解,以上就是全部内容了。
桃花潭水深千尺,不急不急学完再说