Java教程

java的使用以及介绍

本文主要是介绍java的使用以及介绍,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

java介绍

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。

java的使用

1.下载安装

java官网下载地址上找到对应的版本下载,本文以windows、liunx、jdk1.8.0_151为例。
下载完之后傻瓜式安装就好,默认目录C:\Program Files\Java\

2.环境变量配置

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能出现对应的版本表示安装成功。

java的特性与结构

特点: 一处编译,多处执行,跨平台,安全性(1.摒弃指针 2、GC垃圾回收机制:(自动释放回收长时间不使用对象的内存))

结构:JDK & JRE & JVM

  • JDK(Java Development Kit Java开发工具包),JDK是提供给java开发人员使用的,其中包含了java的开发工具,也包括了jre,其中的开发工具:编译工具(javac.exe) 打包工具(java.exe)等等
  • jre(Java Runtime Environment Java运行环境),包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需要的核心库类等,如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可.
  • JVM(Java Virtual Machine) 是Java虚拟机,Java程序需要运行在虚拟机上,不同的平台有自己的虚拟机,所以Java语言是跨平台语言
  • 三者结构图:
    结构关系图

关键字含义

  • Java关键字是电脑语言里事先定义的,有特别意义的标识符,有时又叫保留字,还有特别意义的变量。
关键字含义
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是Java提供的一种轻量级的同步机制。同synchronized相比(synchronized通常称为重量级锁),volatile更轻量级。
    • 一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:

    • 1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。

    • 2)禁止进行指令重排序。

  • Atomic原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。

java中的数据类型

1.引用数据类型

数组、类型、接口。

2.基本数据类型

  • short:java中的整型,一个short变量是int变量所占空间的1/2,长度为2字节的16bit
  • 整型:byte、short、int、long(8位一个字节、16/2、32/4、64/8)
  • 浮点数:folat、double(32/4、64/8)
  • 布尔类型:boolean
  • char:char(16/2)

级别从低到高为:byte、char、short(平级)->int->float->long->double

java中整型初始值默认0,浮点型默认0.0,布尔类型默认false,引用数据类型默认null

3.字符串

lang包下的String类,是不可以被继承的。
==在基础数据类型比较时,比较的是他们的值。在复合数据类型时(类、对象),比较的是他们内存中的存放地址。
equals方法,默认是比较对象的内存地址,但是一些类中已被覆盖,比较两个对象的内容是否相同。

4.运算

  • << 表示左移,不分正负数,低位补0,转成二进制,后面补两位0,不足位数的前面通通补0
//例如: 25左移两位
25 << 2  25二进制 0001 1001 左移两位低位补零 0110 0100 最终结果100
//小技巧 x << y x*2的y次方,此处^为数学符号
25*2^2 25*4=100 
  • 右移>> 如果该数为正,则高位补0,若为负数,则高位补1
//例如:25右移两位 
25 >> 2  25二进制 0001 1001 右移两位高位正数补零 0000 0110 最终结果6
//小技巧 x << y x/2的y次方,此处^为数学符号
25/2^2 25/4=6
  • &运算,转换成二进制比较的每一位,只有都是1的时候才是1,否则为0
//例如 25 & 98 = 0
25 二进制 0001 1001
98 二进制 0110 0010 
   结果得 0000 0000 = 0
//例如 27 & 98 = 2
27 二进制 0001 1011
   结果得 0000 0010 = 2

5.数组

先定义、开辟空间、赋值在使用。java数组长度不可变

  • 数组的定义:

    • (1) String[] str0=null;//定义
    • (2)String[] str1=new String[4];//定义并开辟空间
    • (3)String[] str2={"A","B","C","D"};
    • (4) 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方法

面向对象

1.普通class类

  • 类:对某一类事务的描述,java里面称class
  • 属性:某一类事物具有的共同点或者特征,程序里面称为全局变量或者成员变量
  • 方法,某一类事物具有的动作
  • 类定义和使用
class 类名{
    属性
    方法
}
使用关键字new可以创建类对象,使用过类.属性或者类.方法完成调用
  • 创建一个对象在内存中都做了什么事情 ?
1.先将指定位置的class文件加载进内存
2.执行启动main方法时,在栈内存中开辟了main方法的空间(压栈-进栈),然后在main方法的栈区分配一个变量p
3.new关键字向堆内存中申请开辟一个了实体空间,分配一个内存首地址值
4.在该实体空间中进行属性的空间分配,并进行了默认初始化
5.对空间中的属性进行显示初始化
6.进行实体的构造代码块初始化
7.调用该实体的构造方法,进行构造方法初始化
8.将首地址赋值给p,p变量就引用了该实体,指向了该对象
  • 从上可以看出类的加载顺序,先初始化变量属性,再是初始化静态代码块,再是构造方法,再是成员方法

2.抽象类 abstract

  • 抽象类的特点
1.抽象方法只能定义在抽象类中, 抽象类和抽象方法必须有abstract关键字修饰(不可以修饰变量)
2.抽象方法只定义方法声明,并不实现,非抽象的方法也可以正常定义
3.抽象类不可以被实例化(new),因为存在不具体的方法,没法分配准确的内存
4.只有通过子类继承并实现抽象类中所有的抽象方法后,该子类才可被实例化,否则子类就也是一个抽象类
  • 抽象类的问答
1.抽象类是否能被实例化? 上面第三点有讲
2.抽象类是否有构造方法? 有,供子类给对象初始化
3.抽象类是否一定要定义抽象方法? 不一定,抽象代表不具体不确定,有抽象方法是为了让子类更好的实现
4.抽象关键字abstract和哪些关键字不能共存? final, private, static
5.抽象类中可以有普通成员变量
6.抽象类中可以有普通静态方法

3.接口 interface

  • 接口的特点
1.接口是特殊抽象类,所有方法都是抽象方法(1.8以后可以定义普通有方法体的方法),数据成员都是public static final
2.接口不能被实例化,方法虽然省略abstract关键字,单实际上还是抽象方法
3.接口里面的变量都是常量,且不可更改
4.接口只能通过implements来实现,一个实现类,可以实现多个接口,实现需要重新所有的抽象方法
5.接口可以继承接口
6.接口中没有构造方法
  • 接口的优点
1.java由于单继承,接口可以弥补无法多继承的缺点
2.高内聚低耦合,接口可以实现解耦
3.一种规范

4.抽象类和接口的区别

1.抽象类只能被继承,而且只能被单继承
2.接口需要被实现,且可以多实现
3.抽象类中可以定义非抽象方法,子类继承后可以直接使用
4.接口中都有抽象方法,需要子类实现

其他的自行了解,以上就是全部内容了。

桃花潭水深千尺,不急不急学完再说

这篇关于java的使用以及介绍的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!