一、Java的特性与优势
特点
简单
面向对象
可移植/跨平台
高性能
安全性
动态性
分布式
健壮性
优点
平台无关性,拜托硬件束缚,“一次编写,到处运行。”
相对安全的内存管理和访问优势,避免大部嗯内存泄漏和指针越界
热点代码检测时运行时编译及优化,使程序随运行时间增长获得高性能
完善的应用程序接口,支持第三方类库
二、Java的三大版本
JavaSE:(Java Standard Edition)标准版,定位在个人计算机的应用上
JavaME:(Java Micro Edition)微型版,用于嵌入式开发,定位在手机等电子消费产品上的应用。
JavaEE:(Java Enterprise Edition)企业级,定位在服务器上的应用
三、JDK,JRE,JVM三者之间的区别和联系
1.基础简介
JDK:java开发工具包,java须在基础上进行应用程序的开发
JRE:java运行时环境,java程序运行起来得有它
JVM:Java虚拟机,为了屏蔽Java程序在不同操作系统上运行的差异性,它是使得java可以跨平台的原因,位于JDK的最底层。
2.JDK和JRE的区别
JDK提供了编译运行时Java程序的各种工具,包括编译器、JRE以及常用类库,是Java的核心。
JRE是Java程序运行的必要环境,包括JVM、核心类库,核心配置工具。
四、Java运行机制
java程序的运行机制分为编写、编译和运行三个步骤
编写
编写是指在Java开发魂晶中进行代码程序的编写,最终生成后缀名“.java”的java源文件
2.编译
编译是指使用Java编译器对yuanwenjian进行错误排查的过程,编译后生成后缀名为“.class”的字节码文件,该文件可以被java虚拟机(JVM)的解释器正常读取。
3.运行
运行是指使用Java解释器将字节码文件翻译成机器代码,执行并显示结果。字节码文件是一种和任何具体机器环境及操作系统环境无关的中间代码,它是一种二进制文件,是Java源文件由Java编译器编译后生成的目标代码文件。编程人员和计算机都无法直接读懂字节码文件,它必须用专用的Java解释器来解释执行,因此Java是一种在编译基础上进行解释运行的语言。
完整的程序运行过程总结:从编写出来的Java源文件,经过Java编译器编译为字节码文件,再通过JVM执行程序,然后将程序的运行结果展示给用户。
五、Java基础
1.注释
单行注释://用于注释少量的代码或者对附近的代码进行说明
快捷键:选中区域+alt+/ 取消注释也是同样这个快捷键
多行注释:/**/多用于注释多行代码
快捷键:选中区域+Ctrl+shift+/
取消注释:选中区域+Ctrl+shift+\
文档注释:/** */一般用于为类和方法名进行说明
快捷键:alt+shift+j
注意区分:什么是注解?什么是元注解?
注解是一种标记,使类或者接口附加额外信息,帮助编译器和JVM完成一些特定功能。例如@Override
元注解是自定义注解的注解
2.标识符和关键字
(1)java标识符的定义
包名、类名、方法名、参数名、变量名等,这些符号被称为标识符。
标识符可以由字母、数字、下划线和美元符号$组成
标识符不能以数字开头,不能是Java中的关键字
Java区分大小写
不可以用关键字和保留字作为标识符,但标识符能包括关键字和保留字
标识符不能含有空格
例:合法的标识符:date、$abc、D$Date
不合法的标识符:123.com、2com、for、if
(2)Java标识符规则
包名所有字母必须小写
类名和接口名每个单词的首字母都要大写,例子:ArrayList
常量名所有的字母都要大写,单词之间用下划线连接。例子:DAY_OF_MONDAY
变量名和方法名的第一个单词首字母小写,从第二个单词开始,每个单词首字母大写。例子:lineName
在程序中,应该尽量使用有意义的英文单词来定义标识符,使得程序便于阅读。
(3)Java关键字
访问修饰符的关键字(3个)
关键字 | 意思 | 备注,常用 |
public | 公有的 | 可跨包 |
protected | 受保护的 | 当前包内可用 |
private | 私有的 | 当前类可用 |
定义类、接口、抽象类和实现接口、继承类的关键字、实例化对象(6个)
关键字 | 意思 | 备注,常用 |
class | 类 | public class A(){} 花括号里有已实现方法体,类名需要与文件名相同 |
interface | 接口 | public interface B(){} 花括号里有方法体,但没有实现,方法体句子后面是英文分号“:”结尾 |
abstract | 声明抽象 | public abstract class C(){} 介于类与接口中间,可以有也可以没有已经实现的方法体 |
extends | 继承 | 用于类继承类 public class A extends D(){} |
implements | 实现 | 用于类或接口实现接口public class A interface B(){} |
new | 创建新对象 | A a=new A(); A表示一个类 |
包的关键字(2个)
关键字 | 意思 | 备注,常用 |
import | 引入包的关键字 | 当使用某个包的一些类时,仅需类名 然后使用ctrl+shift+o或者选定类名(类或属性或方法)按住ctrl+单击 即可自动插入类所在的包。如:JFrame 快捷键之后自动加入 |
package | 定义包的关键字 | 将所有有关的类放在一个包类以便查找修改等。如:package javake.flycat.draw002; |
数据类型的关键字(12个)
关键字 | 意思 | 备注,常用 |
byte | 字节型 | 1B=8bit |
short | 短整型 | 2B=16bit |
int | 整型 | 4B=32bit |
long | 长整型 | 8B=64bit |
float | 单精度浮点型 | 4B |
double | 双精度浮点型 | 8B |
char | 字符型 | 2B |
boolean | 布尔型 | -- |
void | 无返回 | public void A(){} 其他需要返回的经常与return连用 |
null | 空值 | |
true | 真 | |
false | 假 |
条件循环(流程控制)(12个)
关键字 | 意思 | 备注,常用 |
if | 如果 | if(){} 如果小括号里面怎么怎么样 花括号就怎么怎么样 |
else | 否则 | 常与if连用,用法相同 |
while | 当什么时候 | while 怎么样就do什么 while(){} |
for | 满足三个条件时 | for ( ; ; ){} |
switch | 开关 | switch(表达式) { case 常量表达式1:语句1; .... case 常量表达式2:语句2; default:语句; } |
case | 返回开关里的结果 | |
default | 默认 | |
do | 运行 | 长与while连用 |
break | 跳出循环 | |
continue | 继续 | 中断本次循环,并并开始下一次 |
return | 返回 | return 一个返回值类型 |
instanceof | 实例 | 一个二元操作符,和==,>,<是同一类的。测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据 |
修饰方法、类、属性和变量(9个)
关键字 | 意思 | 备注,常用 |
static | 静态的 | 属性和方法都可以用static修饰,直接使用类名.属性和方法名。 只有内部类可以使用static关键字修饰,调用直接使用类名.内部类类名进行调用。 static可以独立存在。静态块 |
final | 最终的不可被改变的 | 方法和类都可以用final来修饰 final修饰的类是不能被继承的 final修饰的方法是不能被子类重写。 常量的定义: final修饰的属性就是常量。 |
super | 调用父类的方法 | 常见public void paint(Graphics g){ super.paint(g); ··· } |
this | 当前类的父类对象 | 调用当前类中的方法(表示调用这个方法的对象) this.addActionListener(al):等等 |
native | 本地 | |
strictfp | 严格、精准 | |
synchronized | 线程、同步 | |
transient | 短暂 | |
volatile | 易失 |
错误处理(5个)
关键字 | 意思 | 备注,常用 |
catch | 异常处理 | 1.try+catch 程序的流程是:运行到try块中,如果有异常抛出,则转到catch块去处理。然后执行catch块后面的语句 2.try+catch+finally 程序的流程是:运行到try块中,如果有异常抛出,则转到catch块,catch块执行完毕后,执行finally块的代码,再执行finally块后面的代码。 如果没有异常抛出,执行完try块,也要去执行finally块的代码。然后执行finally块后面的语句 3.try+finally 程序的流程是:运行到try块中,如果有异常抛出的话,程序转向执行finally块的代码。那末finally块后面的代码还会被执行吗?不会!因为你没有处理异常,所以遇到异常后,执行完finally后,方法就已抛出异常的方式退出了。 这种方式中要注意的是,由于你没有捕获异常,所以要在方法后面声明抛出异常 |
try | 捕获异常 | |
finally | 有没有异常都执行 | |
throw | 抛出一个异常对象 | 一些可以导致程序出问题的因素,比如书写错误,逻辑错误或者是api的应用错误等等. 为了防止程序的崩溃就要预先检测这些因素,所以java 使用了异常这个机制. 在java中异常是靠 "抛出" 也就是英语的"throw" 来使用的,意思是如果发现到什么异常的时候就把错误信息 "抛出" |
throws | 声明一个异常可能被抛出 | 把异常交给他的上级管理,自己不进行异常处理 |
剩余2个
关键字 | 意思 | 备注,常用 |
enum | 美剧,列举类别 | |
assert | 断言 |
3.数据类型
基本类型:见前文的数据类型关键字
引用类型:类,接口,数组
4.数据类型的扩展
(1)整数扩展
int i1 = 010;
int i2 = 0x10;
上述中的i1=8,i2=16.因为以数字0开头表示八进制,以0x开头表示计算机里的十六进制;
(2)浮点数扩展
float f = 0.1F;
double d = 1.0/10;
输出的结果f=0.1,d=0.1,但计算机在判断f和d是否相等时,计算机会判断为false。
(3)字符扩展
char c1 = 'a';
char c2 = '中';
System.out.println(c1);
System.out.println((int)c1);
System.out.println(c2);
System.out.println((int)c2);
输出的结果:a,97,中,20013
(4)boolean扩展
boolean flag = true;
if(flag == true){}
if(flag){}
上面第二行和第三行写法不同但作用相同
5.类型转换
在java中整型、实型、字符型被视为简单数据类型,这些类型由低级到高级分别为(byte,short,chart)、int、long、float、double。
(1)自动类型转换:从低级到高级。
(2)强制类型转换:从高级到低级,注意有内存溢出问题,得出的结果很可能
是负数。
注意:
boolean类型不能转换
不能把不相干的类型转换
有内存溢出和精度问题存在
6.变量
变量是程序中最基本的存储单元,相当于占用了内存中的空间,其要素包括变量名、变量类型和作用域。
(1)注意事项
在java中,所有的变量在使用前必须声明,声明变量的基本格式如下:
类型 变量名 [ = value];
例:int a = 1;
int a=1,b=2,c=3;
//可以这样用逗号隔开,但不建议这样做。
java取的变量名必须是合法的
java的变量定义是以分号结束
(2)java语言支持的变量类型
类变量:独立于方法之外的变量,用static修饰;
实例变量:独立于方法之外的变量,不过没有static。从属对象,如果不初始化,默认值为0,boolean类型的默认值为false,除了基本类型其他默认为null。
局部变量:类的方法中的变量。必须声明和初始化值
//实例
public class Variable{
static int allClicks=0; // 类变量
String str="hello world"; // 实例变量
public void method(){
int i =0; // 局部变量
}
}
7.常量
java常量可以理解为特殊的变量,定义后不能改变。
static final double PI = 3.1415926;
注:java命名规则:
包命名:包常用顶级域名作为前缀,例如com,net,org,edu,gov,cn,io等,随后紧跟公司/组织/个人名称以及功能模块名称。示例:
package org.springframework.boot.autoconfigure.cloud
package org.springframework.boot.util
package org.hibernate.action
package org.hibernate.cfg
package com.alibaba.druid
类名:首字母大写以及遵循驼峰规则
方法名:首字母小写以及遵循驼峰规则
局部变量:首字母小写以及遵循驼峰准则