Java教程,
Java教程,
1 Java概述
1.1 了解Java
Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun公司于1995年5月推出的Java程序设计语言和Java平台的总称,Java是一个纯的面向对象的程序设计语言。
1.1.1 Java特点
Java的特点
Java 编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。Java的编译执行:不同于一般的编译执行计算机语言和解释执行计算机语言。但是他归类于解释型的语言,因为它在执行的过程中还是边执行边解释的,但执行的是已经编译好了的二进制文件,所以Java的执行跟编译和解释都有关系。
首先在Java平台上将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码,在实现这个Java平台的任何系统中运行。在运行时,Java平台中的Java解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。从而实现了“一次编译、到处执行”的跨平台特性。
1.1.2 Java核心
JDK
JDK是整个Java的核心,是java最基本的开发和运行工具包.包括了Java运行环境,Java工具和Java基础的类库。是从SUN的JDK5.0开始,提供了泛型等非常实用的功能,其版本也不断更新,运行效率得到了非常大的提高。JDK提供环境和命令,可以把写好的.java文件转成字节码文件.class用的.在运行的时候读取*.class
让CPU能认识。JVM
Java虚拟机是Java语言底层实现的基础.Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用模式Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。垃圾收集器
Java系统自动对内存进行扫描,对长期不用的空间作为”垃圾”进行收集,使得系统资源得到更充分地利用.按照这种机制,程序员不必关注内存管理问题,这使Java程序的编写变得简单明了,并且避免了了由于内存管理方面的差错而导致系统出问题。
1.1.3 Java体系
JavaSE
Java SE(Java Platform,Standard Edition)。Java SE 以前称为J2SE。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的Java应用程序。Java SE 包含了支持Java Web 服务开发的类,并为Java Platform,Enterprise Edition(Java EE)提供基础。JavaEE
Java EE(Java Platform,Enterprise Edition)。这个版本以前称为J2EE。企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端 Java 应用程序。Java EE 是在Java SE 的基础上构建的,它提供Web 服务、组件模型、管理和通信API,可以用来实现企业级的面向服务体系结构(service-oriented architecture,SOA)和Web 2.0 应用程序JavaME
Java ME(Java Platform,Micro Edition)。这个版本以前称为J2ME,也叫K-JAVA。Java ME 为在移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)上运行的应用程序提供一个健壮且灵活的环境。Java ME 包括灵活的用户界面、健壮的安全模型、许多内置的网络协议以及对可以动态下载的连网和离线应用程序的丰富支持。基于Java ME 规范的应用程序只需编写一次,就可以用于许多设备,而且可以利用每个设备的本机功能。
1.2 开发环境搭建
从Oracle官网中下载好Javs安装包(JDK+JRE)后安装。建议新建一个Java文件夹,在Java文件夹中新建两个子文件夹,分别是JDK和JRE,方便环境变量的配置。
下面开始环境变量的配置。右击我的电脑->属性->高级系统设置->环境变量,在下方的系统变量中进行如下操作。
新建名为JAVA_HOME的环境变量,对应环境变量值为你刚才电脑安装JDK的路径,例如:
C:\Program Files\Java\JDK。
在Path环境变量的末尾添加如下值:
;%JAVA_HOME%\bin
新建一个名为CLASSPATH的环境变量,然后,输入如下值:
.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
下面来测试一下Java是否安装完毕,在任意界面按下Win键+R,弹出运行框。在运行框中输入cmd,在弹出的cmd中输入 java –version
,查看是否显示Java版本信息,如图所示:
2 基础语法
2.1 语言成分
2.1.1 Java的数据类型
Java中数据类型分为基本数据类型和引用数据类型,如图所示:
注意,Java中所有的基本数据类型都有固定的存储范围和所占内存空间的大小,而不受具体操作系统的影响,来保证Java程序的可移植性。
整型数据默认为int
数据类型,浮点型默认为double
数据类型,如果要表示long型数据或float型数据,要在相应的数值后面加上l、L
或f、F
,否则会出现编译问题,例如:
float num=10.0;
执行以上语句,程序报错如下:
Unresolved compilation problem: Type mismatch: cannot convert from double to float
Java采用Unicode
编码方式,因此,字符既可以使用’字符’
也可以采用’\u+万国码’
的形式,例如:
char numA='中';
char numB='\u4e2d';
System.out.println(numA+'--'+numB);//中--中
2.1.2 最终变量和符号常量
- 最终变量是采用关键字
final
声明的变量,只能进行一次赋值,例如:
final num=20;
pi=10;
执行以上语句,程序报错如下:
Unresolved compilation problem: The final local variable num cannot be assigned. It must be blank and not using a compound assignment
- 符号常量保存在程序中不能被改变的数据,常量名是标识符,用关键字
final
声明,例如:
final double PI=3.14;
System.out.println("π="+PI);
运行结果如图所示:
2.1.3 位操作符
- 左移
符号为“<<”,后面补0,不区分正负数。(注:左移一位相当于×2)。
int a = 10;
System.out.println(a<<2);//40
- 有符号正数右移
符号为“>>”,向右平移n位,前面补0,最后n位抹去。
int a = 10;
System.out.println(a>>2);//2
- 有符号负数右移
符号为“>>”,向右平移n位,前面补1,最后n位抹去。
int a = -10;
System.out.println(a>>2);//-3
- 无符号右移(只针对负数有效)
符号为“>>>”, 向右平移n位,前面补0,最后n位抹去。
int a = -10;
System.out.println(a>>>2);//1073741821
- 位与(&),位或(|),异或(^)运算符
把两个操作数都转换为二进制,然后一位一位的进行位与,位或,异或,操作。完成后再转换为十进制,得到结果。
int a=5,b=4;
System.out.println(a&b);//4
System.out.println(a|b);//5
2.1.4 BigDecimal类
双精度型double仅能处理16位有效数,在实际应用中,需要对更大或更小的数进行运算和处理,java.math
包中提供的BigDecimal
类用来对超过16位有效数进行精确的运算。
由于一般数值类型,不能准确代表16位有效数仪上的数字,在使用BigDecimal时,使用BigDecimal(String)
构造器创建对象才有意义。
另外,BigDecimal创建的是对象,我们不能使用+、-、×、\等算数运算符直接对对象进行算术运算,而必须调用其相应的方法。
方法名 | 解释 |
---|---|
BigDecimal(String val) | 将 val表示形式转换为 BigDecimal |
add(BigDecimal augend) (加减乘除同理) | 返回一个 BigDecimal,其值为 this + augend |
intValue() (double、float、long同理) | 将此 BigDecimal 转换为 int |
例如:
BigDecimal num1=new BigDecimal(10.123456789987654321);
BigDecimal num2=new BigDecimal(13.987654321123456789);
System.out.println("num1+num2="+num1.add(num2));
System.out.println("num1-num2="+num1.subtract(num2));
运行结果如图所示:
2.2 输入语句
在程序开头导包
import java.util.Scanner;
创建对象
Scanner s=new Scanner(System.in);
输入语句格式为
变量名=s.nextInt();
Scanner类的常用方法
方法 | 说明 | 方法 | 说明 |
---|---|---|---|
nextByte() | 输入一个字节 | nextLine() | 输入一行字符串(Enter结束) |
nextShort() | 输入一个短整数 | next() | 输入一行字符串(Enter Tab Space结束) |
nextInt() | 输入一个整数 | nextFloat() | 输入一个单精度数 |
nextLong() | 输入一个长整数 | nextDouble() | 输入一个双精度数 |
例如:
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("please input a number");
double number=scanner.nextDouble();
System.out.println("the number is:"+number);
}
运行结果如图所示:
2.3 数组
2.3.1 声明与初始化
数组的声明具有以下两种方法:
int a[]={1,2,3….}; 等价int[] a={1,2,3….};
int c[]=new int[3]; 等价int[] c=new int[3];
数组名的length
属性可以获取长度。对于一维数组,获取的是该一维数组的长度;对于多维数组,获取的是其第一维数组的长度。例如:
public static void main(String[] args) {
int[] a=new int[]{1,2,3};
int[][] b=new int[][]{{1},{2,3},{4,5,6}};
System.out.println("a.length="+a.length);
System.out.println("b.length="+b.length);
for(int i=0;i<b.length;i++)
System.out.println("b["+i+"].length="+b[i].length);
}
运行结果如图所示:
2.3.2 基本操作
(1)拷贝
数组的拷贝具有以下两种方法。
利用for循环一位一位的进行赋值
利用拷贝方法
arraycopy
来实现,该方法具体使用如下:
System.arraycopy(拷贝源数组名,源数组从哪一位开始拷贝,拷贝到的数组名,拷贝到的数组从哪一位开始,拷贝位数)
例如:
public static void main(String[] args) {
int[] a={1,2,3,4};
int[] b=new int[a.length];
System.arraycopy(a, 0, b, 0, a.length);
for(int i=0;i<a.length;i++)
System.out.println("b["+i+"]="+b[i]);
}
运行结果如图所示:
(2)输入
调用Arrays包下的toString(数组名)
方法可以实现数组的输出,例如:
public static void main(String[] args) {
int[] a={1,2,3,4};
System.out.println(Arrays.toString(a));
}
运行结果如图所示:
(3)扩容
调用Arrays包下的copyOf(要扩容和复制的数组,扩容后的大小)
方法可以实现数组的输出,例如:
public static void main(String[] args) {
int[] a={1,2,3,4};
a=Arrays.copyOf(a, a.length+1);
System.out.println("a.length="+a.length);
}
运行结果如图所示:
(4)排序
调用Arrays包下的sort(数组名)
方法可以实现数组的输出,例如:
public static void main(String[] args) {
int[] a={1,7,3,-5};
Arrays.sort(a);
System.out.println(Arrays.toString(a));
}
运行结果如图所示:
2.4 字符串
2.4.1 字符串
字符串定义:
String 变量名=”内容”;
public static void main(String[] args){
String a = "wxs";
System.out.println(a);//wxs
}
字符串数组定义:
String[] 数组名;
public static void main(String[] args){
String a = {"wxs","tom"};
for(int i=0;i<a.length;i++)
System.out.print(a[i],);//wxs,tom,
}
2.4.2 值与串的互相转换
- 值转串
Double.toString(0.008) //方法1
String.valueOf(0.008) //方法2
0.08+” ” //方法3
- 串转值
Double.valueOf(“0.08”).doubleValue() //方法1
Integer.parseInt(“123”) //方法2
Integer(“123”).intValue() //方法3
2.5 for-each循环
for(dataType varName:arrayName){
//循环体语句
}
dataType——必须与数组类型相同。可以是任何基本数据类型或者类
varName——变量名,用来代表数组中的元素
arrayName——已存在的数组名
该循环将按数组元素次序,自动循环arrayName.length-1
次,例如:
public static void main(String[] args) {
int[] a={1,7,3,-5};
for (int num : a) {
System.out.println(num);
}
}
运行结果如图所示:
2.6 随机产生数
Java中随机产生数具有以下两种方法:
(1)Random包中的随机方法
在程序开头导包:
import java.util.Random;
创建对象:
Random r=new Random();
输入语句格式为:
变量名=r.nextInt(范围最大值-范围最小值+1)+范围最小值;
(2)Math包中的随机方法(产生随机数每次为唯一固定值)格式:
(随机产生类型)Math.random()×最大减最小+1 +最小。
例如:
public static void main(String[] args) {
System.out.println("Random实现随机产生数(1-10):");
Random random=new Random();
int numA=random.nextInt(10)+1;
System.out.println("numA="+numA);
System.out.println("Math实现随机产生数(1-10):");
int numB=(int)Math.random()*10+1;
System.out.println("numB="+numB);
}
运行结果如图所示:
相关文章
- 暂无相关文章
用户点评