文章目录
什么是Java?
- 程序设计语言;开发环境;应用环境;部署环境
java语言的特性
- 提供庞大的类库,纯粹面向对象
- 支持动态的和静态的代码继承和重用
- 提供可解释执行的环境
- 一次编写,到处运行 先编译后解释执行, java源文件先通过编译生成一个字节码文件bytecode(在任何平台都一样的二进制文件),字节码文件不能直接运行,需要JVM的支撑才能运行
- java虚拟机:JVM
java解释器功能由JVM实现Bytecode ---> JVM --->CPU
- 垃圾收集:Garbage Collection
- 代码安全:Code Security
- 字节码文件:Verifying
- 字节码的结构是由JVM特定指定的
- 字节码不会破坏,篡改系统,禁止运行时 堆栈溢出,防止蠕虫病毒袭击
安装,搭建JAVA开发运行环境
JDK,JRE,JVM
- jre是jdk的子集,在一套完整的jdk中就包含jre
- jre只负责运行一个编译好的java程序(字节码文件bytecode)
- jdk负责去编译,调试,运行整个操作过程都支持
- 在jre内部有一个软件组件JVM就是java虚拟机
JDK的结构目录
bin
目录:java开发调试的命令,exe文件,连接库文件,编译器等等javac
:编译一个Java文件;java
:运行一个java文件 ;编译程序java -d myfirstjava.java
jre
目录:jdk自带的jresrc
压缩文件:放置的是jdk类库的源码文件,按包结构组织demo
:java代码的演示实例文件include
:用于编译本地方法的文件docs
:html格式的类库文档lib
:类库文件
java程序开发环境配置 (windows平台)
- 环境变量:
- JAVA_HOME:保存jdk的安装目录
JAVA_HOME ="jdk安装目录"
- CLASSPATH:系统搜索字节码(类文件
.class
)文件的搜索路径。设置系统在查找字节码文件时,它的搜索路径CLASSPATH =.; %JAVA_HOME%\jre\lib\rt.jar;
- PATH:设置命令的搜索路径,在执行命令时,操作系统就会在PATH设置的路径去查找命令的可执行文件。
PATH =%JAVA_HOME%\bin;
- JAVA_HOME:保存jdk的安装目录
包的概念,含义和使用
- 包的声明:
package xxx
package是关键字 xxx是包名 - 包是比类更大的概念,运用包可以更方便的管理类
- 一个包可以组织不同模块功能的类
java常用命令
- javac [选项] 源文件名 --编译java源文件
-d
指定放置生成的类文件的位置- 查看javac命令到底有哪些选项 ,直接
javac -help
命令回车
- java [选项] 类名[参数] 运行java程序
- jdb [选项] 类名[参数] 进行debug调试的命令
- -javadoc [选项] 包名 源文件名 生产jdk的api形式的程序文档
JDK的常用包
java.lang
:JAVA语言包,核心的类和接口,无需导入可直接使用。如String、Math、Integer等java.awt/javax.swing/java.awt.event
:做java的图像开发使用的包,包含有图形组件,用来构建和管理应用程序的图形用户界面java.applet
:用来开发java小程序的类和接口,包含了可执行applet特殊行为的类java.io
:包含了java所有做输入输出的类和接口,包含处理I/O文件的类java.net
:用来做网络开发的类和接口java.util
:java工具包,包含java开发常用的工具类,java的时间日期,java的数据结构,随机数发生等
java中的特殊符号
- 单行注释: //
- 多行注释: /* …* /
- 多行注释:/**…*/
- 多行注释可以不打开源文件来查看,java中有一个javadoc工具,它的作用是将源文件中的多行注释单独抽取出来放在另一个文件中
java命名规范
- 包名, 类名,接口名:每个单词的首字母大写,其他字母小写
- 属性,方法,局部变量名:第一个单词全小写,从第二个单词开始以后每个单词的首字母大写,其他字母小写
- 常量:每个单词所有字母全部大写,单词之间用_来连接,java中使用
final
修饰,表示常量
java 关键字
abstract
do
implements
private
throw
boolean
double
import
portected
throws
break
else
instanceof
public
transient
byte
extends
int
return
true
char
finally
native
super
volatile
class
float
new
switch
while
continue
for
null
synchronized
default
if
package
this
enum
,assert
java的原始数据类型
boolean
true/false
byte
short
int
long
char
double
float
浮点数据类型
- Math类
- lang包下的类,它里面定义了很多方法来实现常用的数学运算
- Math类中的方法都是静态的
- Math类中的方法:
- abs():求绝对值
- sqrt():求平方根
- pow():求乘方
- cos(),sin(),tan(),ctan():数学的三角函数运算
- random() :获得0-1之间的随机数
数据类型的转换
java中的特殊类型-对象
java的运算符
- 赋值运算符
- 比较运算符
- 算术运算符
- 移位运算符
- 位运算符
- 逻辑运算符
- 条件运算符
java的常量
- 常量是程序里持续不变的值,也成为字面值用关键词
final
声明 - 字符串常量:由双引号“ ”括起来表示。
- 空值常量;null表示空值
java中的变量
- 局部变量必须先赋值再使用
- 实例变量、类变量支持不初始化就可以使用
- 实例变量、类变量支持不初始化则系统会自动初始化
- 在主方法中使用实例变量/类变量则必须将其声明为
static
java中的函数
- 在static方法中只能访问static类变量,只能调用static的函数
- 在类的多个方法使用同一变量,那么这个变量要定义在类中且在任何方法之外,这样的变量叫做类变量或实例变量
java中的命令行参数的使用
- java中主方法main()是程序的入口,程序从主方法开始执行
- 在非static方法中可以使用static变量与非static变量
- 位于java命令行最后的信息就是命令行参数
- 如运行 java 包名.类名 a b 回车 ,其中a,b 就是命令行参数
- 主方法的参数String[] args 就是用来接受命令行参数的
- Java中的命令行参数是不包括命令名,args[0]就是指的第一个参数
- 命令行参数接收后都是字符串,若想要得到相应类型的数字则需要使用包装类的方法来转化。如
整型数据int
则使用Integer.parselnt(String)
方法来转化。
函数的参数传递
函数的重载
- 在同一个类中允许同时存在多个名字相同的方法或函数,只要它们的参数类型和参数个数等不同,这样的情况就叫做函数的重载(
overload
) - 函数重载的条件:一定要参数列表不同,函数名相同,但返回值没有条件要求
- 参数类型不同
- 参数个数不同
- 参数的顺序不同
java的流程控制
- 顺序结构
- 选择结构
- 循环结构
java的数组
-
数组也是一个对象,可以有属性,但没有方法的
-
如:一维数组:
int [ ] a
;声明一个数组变量,可以不给数组长度,此时还不会给数组分配空间。当a =new int[10]
;才会分配空间 -
数组名a是一个地址,是数组的引用,但绝不能执行a++a–操作
-
a.length
的值是数组的长度,length是数组的属性 -
数组的初始化,整型数组没有初始化时系统默认会给它赋值为0
-
其他基本类型的数组没有初始化则系统会赋值为相应类型的默认值
-
long :0L
,float:0.0f
,double: 0.0
-
char :'\u000'
,boolean :false
-
对象类型的数组没有初始化则系统默认会赋值为null
-
数组静态初始化
//在定义数组a时就分配空间并初始化
int [] a ={1,2,3,4,5,6,7,8,9 } ;
- 数组动态初始化
//第二个[]中间必须为空,后面才能用{ }来初始化;
//这里产生了2个对象(数组对象,数组名引用)
int [] b =new int [] {1,2,3,4,5,6,7};
String[] str =new String[10];
//定义一个数组
int [] a ;
//为数组分配空间
a =new int [10];
int [] a =new int [10]
int [] a ={1,2,3,4,5,6,7,8};//显式初始化
- 二维数组仿照一位数组同理,同样的初始化过程
- 数值复制:arraycopy()
arraycopy(Object src,int src_pos,Object dst,int dst_pos,int legth)
String类型简介
- string类型:字符串类型,它不是java的8种基本类型,是类的类型
- string是Java的一个类,这个类的实例叫做String对象
- java中字符串用双引号“ ” 来引用
- java中的字符串类不是以‘\0’结尾
- 获取
String
类的对象变量
- String str1 ="hello" ;//声明字符串对象
- String str2 = new String("World!");//定义字符串对象
string常用操作类型
获取字符串长度方法
public int length()
:返回字符串长度char charAt(int)
:返回参数int指示位置上的字符
- System.out.println(str3.length());
- System.out.println(str1.charAt(0));
public String substring(int beginIndex,int endIndex)
public String substring(int beginIndex)
查找字符串方法
int indexOf(String/char):
获得参数字符或字符串在该字符串中的第一次出现的位置索引,找不到返回-1
- public int indexOf(char ch)//返回ch第一次出现的位置
- public int indexOf(String str)//返回子串第一次出现的位置
- public int lastIndexOf(char ch)//最后出现的字符ch的位置
- public int lastIndexOf(String str)//最后的子串str出现的位置
- System.out.println(str3.indexOf("Wor"));
- System.out.println(str3.indexOf("or));
比较字符串的方法
- boolean equals(String)//比较2个字符串内容是否相等,不忽略大小写
- boolean equalslgnoreCase(String)//比较2个字符串内容是否相等,忽略大小写
- int compareTo(String str)
- int compareToIgnoreCase(String str)
修改字符串的常用方法
- String replace(char oldchar,char newchar)
- String replaceAll(String regex ,String newstr)
- String trim()
- String Concat(String)//将当前String与参数String连接起来返回新串
- boolean contains(charSequence s)//判断一个字符串是否包含参数的子串
- String toLowerCase()
- String toUpperCase()
分割字符串的方法
//根据指定的字符串或者正则表达式分割该字符串到字符数组
public String[] split(String regex)
//limit为限制分割字符串个数
public String[] split(String regex ,int limit)
字符串转其他的方法
//将其他数据类型转换为String类型
public static valueOf(Object obj)
//支持若干重载方式
public static valueOf(boolean b)
public static valueOf(char ch)
public static valueOf(double d)
public static valueOf(int i)
//返回一个字符数组,每个元素为该字符串的字符
public char[] toCharArray()
//判断字符串是否以str开头
public boolean startWith(String str)
//判断字符串是否以str开头,搜索位置从startIndex开始
public boolean startWith(String str,int startIndex)
//判断是否以str结尾
public boolean endsWith(String str)
//判断字符串是否为空
public boolean isEmpty()
StringBuffer类
StringBuffer类的构造方法
//创建初始容量为16,不含任何字符的字符缓冲区
public StringBuffer()
//创建初始容量为length,不含任何字符的字符缓冲区
public StringBuffer(int length)
//又str对象的内容创建一个字符缓冲区,初始容量为字符串str长度+16
public StringBuffer(String str)
StringBuffer strb1 =new StringBuffer();
StringBuffer strb2 =new StringBuffer(20);
StringBuffer strb3 =new StringBuffer("java is good");
容量和长度方法
public void setLength(int newLength)
public void ensureCapcity(int newCapacity)
public int length()
public int capacity()
数据提取方法
//访问某个元素
public char charAt(int index)
//访问开始位置到最后面的子串
public String substring(int start)
//访问开始位置和结束位置的子串
public String subatring(int start ,int end)
//转换为String字符串
public String toString()
查找元素方法
- public int indexOf(String str)
- public int indexOf(String str,int fromIndex)
- public int lastIndexOf(String str)
- public int lastIndexOf(String str,int fromIndex)
字符串的修改方法
//往字符串里添加对象
public StringBuffer append(Object obj)
//往字符串里插入对象,offset为偏移量
public StringBuffer insert(int offset,Object obj)
//删除字符串里的一段
public StringBuffer delete(int start ,int end)
//替代字符串里的一段
public StringBuffer replace(int start ,int end ,String str)
//字符串翻转
public StringBuffer resverse()
/*用于该字符序列的方法尝试减少存储.如果缓冲区大于必要保持
其当前的字符序列,那么它可能会调整大小,以成为更有效的空间
*/
public void trimToSize()
StringTokenizor类
//返回还没分隔的片段的个数
public int countTokens()
//返回是否还有分隔片段
public boolean hasMoreTokens()
public boolean hasMoreElements()
//返回从当前位置到下一个分隔符的片段
public String nextToken()
public Object nextElement()