Java入门和概述

1、Java分类
    Java SE:Java Standard Edition,java标准版本,是JDK、JVM以及Java标准API的合集,是ee和me的基础。
    Java EE:Java Enterprise Edition,java企业版本,基于se的一套接口规范,发行商依据这些接口规范实现自己的框架。ee用来做企业级应
用,主要是Java Web,在做企业项目的时候java ee和其衍生出来的spring提供的框架使开发更加方便、快捷和稳定。
    Java ME:Java Mobile Edition,java移动版本,它为移动设备(嵌入式设备、手机等)提供了基于se的开发平台及api合集。由于后来有了
安卓,所以手机移动开发现在大都用的是andriod sdk和框架,而不是me。
2、Java运行及开发

    编译型语言:指针对不同操作系统平台,使用编译器一次性生成可在该平台运行的机器码,并将其封装成该平台能识别的可执行程序,比如C/C++。

    解释性语言:指使用专门的解释器对代码解释成特定平台的执行码并立即执行,相当于执行程序的时候再进行编译,所以效率较低,比如python。    

    JVM:Java Virtual Machine即Java虚拟机,Java不同于一般的编译语言和直译语言(解释性语言),它首先将源代码编译成字节码,然后依赖各种不同平台上的虚拟机来解释执行字节码,从而实现了“一次编写,到处运行”的跨平台特性。由于Java编译器和虚拟机的不同对Java代码的性能影响比语言本身的影响大的多,所以统一讨论Java的程序的性能经常是有误导性的。比如在同样的硬件上,不同时期的JDK版本的性能差距很大,即使是在同一时期,不同公司的JDK和JRE的性能也不一样,比如SUN、IBM、BEA等公司都有自己开发的JDK和JRE。

    JRE:Java Runtime Environment即Java运行时环境,包括JVM、字节码校验器、类加载器、基础类库等。

    JDK:Java SE Development Kit即java se开发包。

    Java EE SDK:Java EE Software Development Kit即java ee开发包。

3、编写Java程序应注意的几点

    大小写敏感:Java是大小写敏感的,这就意味着标识符Hello与hello是不同的。 

    标识符规则:类名、变量名、方法名这些标识符只能以字母、美元符$、数字、下划线_组成,且不能以数字开头。

    类名:对于所有的类来说,类名的首字母应该大写。如果类名由若干单词组成,那么每个单词的首字母应该大写,例如 MyFirstJavaClass。

    方法名:所有的方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词首字母大写,例如myFirstJavaMethod。

    源文件名:如果源文件里定义了一个public类,那么这个public类名必须与该源文件的名称相同,所以一个java源文件里最多有一个public类(切记Java是大小写敏感的),文件名的后缀为.java。(如果文件名和类名不相同则会导致编译错误)。

    字节码文件:编译生成的字节码文件总是以源文件中类名作为文件名,并以.class后缀。

4、编译和执行Java程序

    以下为最简单的一个java程序:

//HelloWorld.java

public class HelloWorld
{
	public static void main(String[] args)
	{
		System.out.println("hello world!");
	}
}

    编译java程序,生成字节码文件:javac -d 目标文件夹 源文件,如 javac HelloWorld.java 为编译当前目录下的源文件HelloWorld.java,并将生成的.class字节码文件保存在当前目录,javac -d ./dest ./src/Test.java为编译当前src下源文件Test.java到当前dest目录下。javac认为源文件使用的是操作系统默认采用的编码格式,在编译的时候可以使用-encoding来声明源文件使用的字符集,如javac -encoding utf-8 -d . HelloWorld.java。

    执行java程序:java 类名,eg:java HelloWorld 为执行当前目录下的HelloWorld类(HelloWorld.class字节码文件)。如果类不在当前目录,有两种方法:

    ①、可以使用-classpath指定使用的类目录,eg:java -classpath C:\java_class HelloWorld 为执行HelloWorld类,HelloWorld类在C:\java_class下搜索。还可以指定在多个目录下搜索类,eg: java -classpath .;C:\java_class HelloWorld 为执行HelloWorld类,HelloWorld类在当前目录和C:\java_class下依次搜索。

    ②、设置环境变量CLASSPATH,因为JRE会使用该变量中的值来搜索java类,所以可以将CLASSPATH的值设为我们的java类所在的目录,需要注意的是设置了CLASSPATH后JRE就不会在当前目录下搜索java类,可以在CLASSPATH值中添加.以增加当前目录,如:.;C:\java_class。补充一点,在命令行下引用环境变量的值的方法为:%EVN_VALUE%。

5、Java关键字

     abstract  抽象方法,抽象类的修饰符 
extends  表示一个类是另一个类的子类 
final  声明类不能被继承或声明常量 
finally  无论有没有异常发生都执行代码 
implements  表示一个类实现了接口 
import  导入类 
instanceof  测试一个对象是否是某个类的实例 
interface  接口,一种抽象的类型,仅有方法和常量的定义 
native  表示方法用非java代码实现 
package  一系列相关类组成一个包 
static  表示在类级别定义,所有实例共享的 
strictfp  修饰类、接口、方法,表示使用精确的浮点型 
synchronized 表示同一时间只能由一个线程访问的代码块 
this  调用当前实例或者调用另一个构造函数  
throws  定义方法可能抛出的异常 
transient  修饰不要序列化的字段 

volatile  标记字段可能会被多个线程同时访问,而不做同步 

        boolean  布尔类型, true或false

        byte  8位数字
char  16 位Unicode字符

short  16位数字  
int  32位整型数 
long  64位整型数
float  32-bit单精度浮点数 
double  64-bit双精度浮点数 
assert  断言条件是否满足 
continue  不执行循环体剩余部分 
default switch 语句中的默认分支 
do-while  循环语句,循环体至少会执行一次
else if 条件不成立时执行的分支 
enum  枚举类型 
for  for循环语句 
goto  用于流程控制 (保留字,暂不使用)
if  条件语句 
new  分配新的类实例 
private  表示私有字段,或者方法等,只能从类内部访问 
protected  表示保护类型字段 
public  表示共有属性或者方法 
return  方法返回值 
static  表示在类级别定义,所有实例共享的 
super  表示基类 
switch  选择语句 
throw  抛出异常 
try  表示代码块要做异常处理 
void  标记方法不返回任何值 

while while循环 

        const 常量(保留字,暂不使用)

        class  表示一个类
break  跳出循环
case  用于switch语句中
catch  try-catch异常处理

        true  直接量,只能赋值给boolean类型
false  直接量,只能赋值给boolean类型
null   直接量,赋值给引用类型

6、强类型语言

    Java是一种强类型语言,强类型有两方面的含义:①所有的变量必须先声明后使用;②指定类型的变量只能接受类型与之匹配

的值。Java基本类型大致可以分为数值型和布尔型,其中数值型包括整形、浮点型、字符型,所有数值型之间可以进行类型转换,

包括自动类型转换和强制类型转换。

    ①自动类型转换:

        数值范围小的可以自动转换为数值范围大的,如short可以转换为int和long。特殊的是char类型,它可以转换为int、long等,

但byte和short不能转换为char,我猜因为char是unsigned类型的原因。数值范围大的不能转换为范围小的,如long、float不能

转换为int,特殊的是对于范围内的字面数值会自动将其作为相应类型而不是int:

		int i = 100000;
		long l = i;
		float f = i;
		short s = 1000;
		
		byte b = s; //错误

    ②强制类型转换

        如果想要将数值范围大的转换为范围小的只能使用括号来进行强制类型转换,但可能会有溢出问题。

    ③表达式中类型的自动提升

        byte、short、char之间的操作表达式的值会自动提升为int;整个算数表达式的类型自动提升到等级最高的操作数的类型。操作数类型的等级高低如下所示:

    

		short s = 123;
		char b = 123;
		short ss = b + s; //出错,表达式类型为int
		
		short sValue = 10;
		sValue = sValue - 2; //出错,表达式类型为int
		
		float f = 3 / 2; //正确,但表达式类型为int,然后自动转换为float,所以f为1.0而非1.5
		
		str = 'a' + 10 + "TEST"; //由于加法的结合性为从左到右,所以先计算'a' + 10表达式的值为107,然后107再与字符串进行相加,107自动转换为字符串,所以str为"107TEST"
		String str = "TEST" + 'a' + 10; //str为"TESTa10"

7、数据类型说明

    对于字面数值默认是int和double,可以加上后缀L和F分别表示long和float。字面数值的前缀0b为二进制表示,0为八进制表示

,0x为十六进制表示。整数除0会抛出异常。

    char字符型的使用类似C++中使用方法,还增加了使用Unicode表示方法,eg:

		char ch = 'a';
		ch = 97;
		ch = '\r'; //java中转义字符与c++中相同,如'\n','\t','\\'等。
		ch = '\u0041'; //Unicode表示方法,0041为十六进制表示,对应十进制为65,故ch为'A'
     三个特殊的浮点数值:
正无穷大:正浮点数除以0得到,通过Double或Float类的POSITIVE_INFINITY表示。
负无穷大:负浮点数除以0得到,通过Double或Float类的NEGATIVE_INFINITY表示。
非数:0.0除以0.0或对一个负数开方得到,通过Double或Float类的NaN表示,非数与任何数都不相等,包括NaN。

eg:

		float f = Float.POSITIVE_INFINITY;
		System.out.println(1.0 / 0 == f); //输出为true
		System.out.println(0.0 / 0); //输出为NaN
		System.out.println(0.0 / 0.0 == Float.NaN); //输出为false

    boolean类型的true和false可以直接与字符串进行连接运算,其实,基本数据类型与字符串进行连接运算时都会自动转换为字符串,所以如果想把基本类型转换为字符串的话可以将其与空字符串进行连接。String的静态方法valueOf()也可以实现数值到String的转换,如:

		String str = true + "ing"; //str为"trueing"
		str = 666 + str; //str为"666trueing"
		System.out.println(str += 0.1);//str为"666trueing0.1"
		
		String str2 = String.valueOf(11.2); //str2为"11.2"

    如下为生成四位随机小写字母的方法,类似生成平常见到的验证码:

public class VerifyCode
{
	public static void main(String[] args)
	{
		String strCode = "";
		for (int i = 0; i < 4; i++)
		{
			int iVal = 'a' + (int)(Math.random() * 26);
			strCode += (char)iVal;
		}

		System.out.println(strCode);
	}
}

8、运算符说明

    java中求余运算%与c++中不同,其操作数可以是浮点,得到的余数也可以是浮点型。与c++相同的是,求余的时候如果除数y是2的幂次方的话,求余可以用位运算&来实现,这样效率更高,如x % y相当于 x & (y - 1)。

    java中按位取反~称为按位非,增加了无符号右移运算符>>>(左边空出来的位补0而不是符号位)。

    ==比较操作的两个操作数如果都是引用类型,只有两个引用变量具有父子关系时才可以比较,当这两个引用指向同一个对象时才返回true。!=于其类似。

    与c++中的逻辑判断&&、||、!不同,java中逻辑判断只能针对布尔类型或常量,且增加了&&和||的非短路版本&和|,同时增加了逻辑异或(两个操作数相同返回false,不同返回true)。

9、文档注释

    如下为文档注释的标注方法,使用javadoc命令来生成文档注释,如javadoc -d ApiDoc *.java为为当前所有的源文件生成文档注释到当前的ApiDoc目录中。

/**
* Description
* <br>Program Name: javadoc test
* <br>Date: 2018/5/9 10:57
* <br>作者: leon
* <br>个人网站: <a href="https://blog.csdn.net/milanleon">milanleon的专栏</a>
*/
public class Test
{
	/**
	*简单测试成员变量
	*/
	public int age;
	/**
	*Test类的测试构造函数
	*/
	public Test()
	{
	}
	/**
	*获得打招呼字符串的方法
	*@param name 指定向谁打招呼
	*@return 返回打招呼的字符串
	*/
	public String hello(String name)
	{
		return name + ", 你好!";
	}
}


猜你喜欢

转载自blog.csdn.net/milanleon/article/details/80180460
今日推荐