1.简单性 没有C++中很难理解的运算符重载、多重继承等模糊概念,不是使用指针而是使用的引用,提供了自动的垃圾回收机制。
2.面向对象 提供类、接口继承原语,只支撑类的单继承,但支撑接口之间的多继承,并支持类与接口之间的实现机制。Java语言全面支持动态绑定【https://blog.csdn.net/weixin_39842271/article/details/114162438】。
3.安全性 不支持指针,一切对内存的访问都必须通过对象的实例变量实现,应用更安全。
4.跨平台性 同一段程序既可以在Windows操作系统上运行,也可以在Linux操作系统上运行。
5.多线程 程序中多个任务可以并发执行。
SUN公司提供的一套开发环境,简称JDK(Java Development Kit),它是整个Java的核心,包括Java编译器、Java运行工具、Java文档生成工具、Java打包工具等。
除了JDK,还提供了一种JRE (Java Runtime Environment)工具,它是Java运行环境,提供给普通用户使用。运行实现编写好的程序。JRE中只包含Java运行工具,不包含Java编译工具。JDK自带JRE。
bin目录 存放可执行程序,javac.exe(Java编译器) java.exe(Java运行工具)jar.exe(打包工具)javadoc.exe(文档生成工具)
db目录 db目录是一个小型的数据库。纯Java实现、开源的数据库管理系统。,不需额外安装一个数据库软件,直接使用 JavaDB即可。
jre目录 java程序运行时环境,此目录是java运行时环境的根目录,包含java虚拟机、运行时的类包、java应用启动器以及一个bin目录,不包含开发环境的开发工具。
include目录 JDK是通过C和C++实现的,启动时需要引入一些C语言的头文件,该目录就是存放这些文件的
lib目录 lib是library的缩写,意为Java类库或库文件,是开发工具使用的归档包文件。
src.zip src文件的压缩文件,src中放置的是JDK核心类的源代码,通过该文件可查看Java基础类的源代码。
cmd ->
jdk的bin目录 ->
编译 javac 文件名 javac helloworld.java
运行 java java helloworld
脚下留心:
编译时可能会出现 “找不到文件”错误 文件扩展名被隐藏了
path环境变量是系统环境变量中的一种,用于保存一系列的路径,每个路径之间以分号分隔。当在命令行窗口运行一个可执行文件时,操作系统首先会在当前目录下查找该文件是否存在,如果不存在,会继续在path环境变量中定义的路径下寻找这个文件,如果仍未找到,系统会报错。
set path 命令可以查看系统变量
设置环境变量 -------------------------------- set path=%path%; c:…\bin
这种变量的设置只对当前窗口有效
Windows系统属性中的环境变量
计算机–》 属性–》系统–》高级系统设置–》高级–》环境变量–》
变量名 path ------------------------------------------------变量值 路径
classpath环境变量也用于保存一系列路径,它与path环境变量的查看与配置的方式完全相同。当Java虚拟机需要运行一个类时,会在classpath环境变量中所定义的路径下寻找所需的class文件和类包。
java helloworld 不设置classpath会报错
set classpath=%classpath%; 路径
如果classpath环境变量没有进行设置 java虚拟机会自动将其设置为 “.” 也就是当前目录
Java程序运行,需要经过编译和运行两个步骤。
将.java的源文件进行编译,生成.class的字节码文件。然后java虚拟机将字节码文件进行解释执行。
Java程序是虚拟机负责解释执行,而并非操作系统。这样做的好处是实现java程序的跨平台。不同的操作系统安装不同版本的java虚拟机就可以运行相同的java程序。
注意:java程序跨平台,虚拟机不是跨平台的,不同的操作系统要安装不同版本的虚拟机。
目的是将类进行管理。
包的声明必须放在第一行
package …;声明包
当一个包中的类需要调用另一个包的类时,需要使用import关键字,这样就不用了书写完整类名了。
import 包名.*; 导入包下所有类
import 包名.类名;
Java扩展的大部分类放在javax包及其子包下。
常用包
java.util 大量工具、集合类,例如Arrays List Set
java.net 包含java网络编程的类和接口
java.io 包含java输入、输出有关类和接口
java.awt 包含构建图形界面(GUI)的相关类和接口
java.sql 数据库编程
javax.swing 编写GUI
JDK中所有的包构成了java类库
基本格式
修饰符 class 类名 {
程序代码
}
注释是对程序的某个功能或者某行代码的解释说明,只在java原文件中有效,编译程序时,编译器会忽略这些注释信息,不会将其编译到class字节码文件中去。
/* int a=10; int c=10; */
/** * * 文档注释内容 * */
文档注释对代码概括性的解释说明,可以使用javadoc命令将文档注释提取出来生成
帮助文档。
包名、类名、方法名、变量名、参数名等,标识符可以由字母、数字、下划线(_)、美元符号($),但标识符不能以数字开头,不能是java中的关键字。
标识符定义的规范
abstract continue for new switch assert default goto package synchronized
boolean do if private this break double implements protected throw byte else import
public throws case enum instanceof return transient catch extends int short try char
final interface static void class finally long strictfp volatile const float native super while
const和goto是保留关键字,虽然在java中没有任何意义,程序中不能作为自定义标识符
程序运行期间可能产生一些临时数据,应用程序会将这些数据保存在一些内存单元中,每个内存单元都用一个标识符来标识。这些内存单元被称为变量,定义的标识符就是变量名,内存单元中存储的数据就是变量的值。
基本数据类型是java内嵌的,在任何操作系统中都具有相同大小和属性。
引用数据类型是在Java程序中由编程人员自己定义的变量类型。
整型变量
byte 8位 — short 16位 — int 32位 — long 64位 加L
浮点数变量
float 32位 加f ------------------- double 64位 加d
字符类型变量
每个char类型字符变量都会占用两个字节,英文半角格式的单引号 ’ '把字符括起来
char c=‘a’;
布尔类型变量
boolean flag=flase; -------- flag=true;
int num=4; byte a=(int)num;
byte b1=3; byt2 b2=4; byte b3=(int)b1+b2;//b1 b2相加时被自动转换为int类型,所以要再进行强转给b3赋值
变量一定会被定义在某一对大括号中,该大括号所包含的代码区域便是这个变量的作用域。
/** * 1. . [] () * 2. ++ -- ~ ! * 3. * / % * 4. + - * 5. << >> >>> * 6. < > <= >= * 7. == != * 8. & * 9. ^ * 10. | * 11. && * 12. || * 13. ?: * 14. = *= /= %= += -= <<= >>= >>>= &= ^= |= */
while(条件){ 代码逻辑 }
do{ 代码逻辑 }while(条件);
for(初始化表达式;条件;操作表达式){ 代码逻辑 }
跳转语句
break; //跳出整个循环语句 //当出现在switch条件语句,作用是终止某个case并跳出switch结构
continue; //终止本次循环,执行下一次循环
方法就是一段可以重复执行的代码。有些书中也会把方法称为函数,这两者本身并没有什么区别,同样的概念,只是称呼方式不一样。
//如果方法不需要参数 参数列表可以为空() 修饰符 返回值类型 方法名([参数类型 参数名1,参数类型 参数名2,......]){ 执行语句 ... return 返回值; }
Java允许一个程序中定义多个名称相同的方法,但是参数类型或个数必须不同,这就是方法的重载。通过传入不同的参数可以确定调用哪个重载的方法。方法的重载与返回值类型无关!
//方法1 public int add(int a,int b){ return a+b; } //方法2 public int add(int a,int b,int c){ return a+b+c; } //方法3 public float add(float a,float b){ return a+b; } @Test void test1(){ add(1,2); //调用方法1 add(1,2,3); //调用方法2 add(1.1f,1.2f); //调用方法3 }
//定义1 int[] arr=new int[100]; //可以存放100int类型的变量 //定于2 int[] arr2; arr2=new int[100];
//初始化1 int[] arr=new int[]{1,2,3}; //初始化2 int[] arr2={1,2,3,4};
// 数组名[索引]; 表示数组中指定索引的变量 //索引的范围 [0,length-1] System.out.println(arr[1]);
其他维度的数组同理
//二维数组 //声明 int[][] arr; arr=new int[100][100]; int[][] arr2=new int[100][100]; //初始化 int[][] arr3=new int[][]{{1,2,3},{4,5,6}}; int[][] arr4={{1,2,3},{4,5,6}}; //访问 System.out.println(arr[1][2]);