Java基础

83 阅读10分钟

常用DOS命令

  • dir:列出当前目录下的文件和文件夹
  • md:创建目录
  • rd:删除目录
  • cd:进入指定目录
  • cd..:退回到上一级
  • cd\:退回到根目录
  • del:删除文件
  • exit:退出dos命令行

Java语言的主要特性

  • Java语言是易学的。Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用Java
  • Java语言是强制面向对象的。Java语 言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。
  • Java语言是分布式的。Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URLURLConnectionSocketServerSacket等。 JavaRMI (远程方法激活)机制也是开发分布式应用的重要手段。
  • Java语言是健壮的。Java的强类型机制、异常处理、垃圾的自动收集等是Java程序健壮性的重要保证。对指针的丢弃是Java的明智选择。
  • Java语言是安全的。Java通 常被用在网络环境中,为此,Java提供了一-个安全机制以防恶意代码的攻击。如:安全防范机制(类ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查。
  • Java语言是体系结构中立的。Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件),然后可以在实现这个Java平台的任何系统中运行。
  • Java语言是解释型的。如前所述,Java程序在Java平台上被编译为字节码格式,然后可以在实现这个Java平台的任何系统的解释器中运行。
  • Java是性能略高的。与那些解释型的高级脚本语言相比,Java的性能还是较优的。
  • Java语言是原生支持多线程的。在Java语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建。

Java技术体系

  • Java SE(Java Standard Edition)标准版
    • 支持面向桌面级应用(如Windows下的应用程序)的Java平台, 提供了完整的Java核心API,此版本以前称为J2SE
  • Java EE(Java Enterprise Edition)企业版
    • 是为开发企业环境下的应用程序提供的一套解决方案。 该技术体系中包含的技术如:ServletJsp等 ,主要针对于Web应用程序开发。版本以前称为J2EE
  • Java ME(Java Micro Edition)小型版
    • 支持Java程序运行在移动终端(手机、PDA)上的平台,对Java API有所精简,并加入了针对移动终端的支持,此版本以前称为J2ME
  • Java Card
    • 支持一些Java小程序(Applets) 运行在小内存设备(如智能卡)上的平台

Java语言的特点

  • 特点一:面向对象
    • 两个基本概念:类,对象
    • 三大特性:封装、继承、多态
  • 特点二:健壮性、完整性
    • 吸收了C/C++语言的优点,但去掉了其影响程序健壮性的部分(如指针、内存的申请与释放等),提供了一个相对安全的内存管理和访问机制
  • 特点三:跨平台性 jvm
    • 跨平台性:一次编写,到处运行
    • 原理:在需要运行Java程序的操作系统上,安装Java虚拟机(JVM,Java Virtual Machine)。由JVM来负责Java程序在该系统中运行。

两种核心机制

  • Java虚拟机
  • 垃圾回收机制(Garbage Collection),GC

Java环境安装和配置

Java开发工具包=JDK

  1. 在网上下载需要的JDK后,安装到自己指定的目录,最好是直接下载一个压缩包(免安装版),解压到指定目录。
  2. 配置系统变量
    1. 新建变量JAVA_HOME,值为解压后JDK的目录
    2. 新建变量CLASSPATH,值为.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
    3. 修改Path,新增两行,一行为%JAVA_HOME%\bin\,零一行为%JAVA_HOME%\jre\bin
  3. CMD中,输入java -version,若有输出版本号,则为配置成功

若需要修改JDK的版本,只用把系统变量的JAVA_HOME更改为所需要的JDK目录即可。

JDK、JRE、JVM的关系

  • JDK(Java Development Kit)
    • Java工具包。
    • 提供给Java开发人员使用,其中包含了Java的开发工具,也包括了JRE。所以安装了JDK,就不用单独安装JRE了。
    • 其中的开发工具:编译工具(javac.exe),打包工具(jar.exe)等。
  • JRE(Java Runtime Environment)
    • Java运行环境
    • 包括Java虚拟机(JVM,Java Virtual Machine)和Java程序所需的核心类库等,如果想要运行一个开发好的Java程序,计算机中只需安装JRE即可。
  • 简而言之,JDK用来开发,JRE用来运行,JVM<JRE<JDK

HelloWorld

//Test.java
public class Test{//类名必须和文件名相同
	public static void main(String[] args){
		System.out.print("Hello,world");
	}
}
  1. javac Test.java
    
  2. 编译完后,会在同目录下新增一个Test.class文件

  3. java Test
    

注释

  • 单行注释//

  • 多行注释/**/

  • 文档注释(java特有)

    /**
     * @author 作者
     * @version 版本
     * @since 最低支持的JDK版本
     */
    public class Doc {
        String name;
        /***
         * @param name
         * @return 返回值
         * @throws Exception
         */
        public void sayName(String name) throws Exception{
            return;
        }
    }
    
    
    #在CMD中用javadoc生成html文档
    javadoc -encoding UTF-8 -charset UTF-8  xxx.java
    

关键字和保留字

关键字

  • 定义与特点

    • 定义:被Java语言赋予了特殊意义,用做专门用途的字符串(单词)
    • 特点:关键字所有字母均为小写
  • 用于定义数据类型的关键字

    • classinterfaceenumbyteshortintlongfloatdoublecharbooleanvoid
  • 用于定义数据类型值的关键字

    • truefalsenull
  • 用于定义流程控制的关键字

    • ifelseswitchcasedefaultwhiledoforbreakcontinuereturn

保留字

  • 定义:现有Java版本尚未使用,但以后版本可能会做为关键字使用。自己命名标记符时要避免使用这些保留字。
  • byValuecastfuturegenericinneroperateouterrestvargotoconst

标识符

  • 标识符
    • Java对各种变量、方法、类等要素命名时使用的字符序列称为标识符
    • 凡是自己可以起名字的地方都叫做标识符
  • 定义合法标识符规则
    • 由26个英文字母大小写、0-9_$组成
    • 数字不可开头
    • 不可以使用关键字和保留字,但能包含关键字和保留字
    • Java中严格区分大小写,长度无限制
    • 标识符不能包含空格
  • 注意:在起名字时,为了提高阅读性,要尽量有意义,见名知意

名称命名规范

  • 包名:多单词组成时所有字母都小写:xxxyyyzzz
  • 类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz
  • 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始首字母大写:xxxYyyZzz
  • 常量名:所有字母都大写。多单词时每个单词使用下划线连接:XXX_YYY_ZZZ

变量

  • 变量的概念
    • 内存中的一个存储区域
    • 该区域有自己的名称(变量名),和类型(类型名)
    • Java中的每个变量先声明,后使用
    • 该区域的数据可以在同一类型范围内不断变化
  • 使用变量注意
    • 变量的作用域:一对{}之间有效
    • 初始化值
  • 定义变量的格式
    • 数据类型 变量名 = 初始化值
  • 变量是通过变量名来访问这块区域的

数据类型

​ Java属于强类型语言,要求变量的使用严格符合规定,所有变量需要先定义才能使用。

按数据类型分类

  • 数据类型
    • 基本数据类型
      • 数字型
        • 整数类型(byte short int long)
        • 浮点类型(float double)
      • 字符型(char)
      • 布尔型(boolean)
    • 引用数据类型
      • 类(class) 字符串(string)也属于
      • 接口(interface)
      • 数组([])

整数类型

类型占用存储空间表述范围
byte1 字节 = 8 bit-128 ~ 127
short2 字节-2^15^ ~ 2^15^-1
int4 字节-2^31^ ~ 2^31^-1
long8 字节-2^63^ ~ 2^63^-1

ps:声明long,需要在数值最后加一个l或L

浮点类型

类型占用存储空间表述范围精度
单精度float4字节-2^128^ ~ 2^128^7位有效数字
双精度double八字节-2^1024^ ~ 2^1024^8位有效数字

ps:Java浮点数默认为double型,声明float常量,必须后面加 f 或 F 。

浮点型常量有两种表示形式:

  • 十进制:如 5.12 512.0f .512
  • 科学记数法:如 5.12e2 512E2 100e-2
//八大基本数据类型

//整数
int num1 = 1;
byte num2 = 2;
short num3 = 3;
long num4 = 4L;//数字后加L

//小数(浮点数)
float num5 = 1.1F;//数字后加F
double num6 = 3.1415926535;

//字符
char name = '王';
        
//布尔值
boolean flag = true;

其他

  • boolean类型不可以用10等数字或null代替,只能用true或者false,这点和C语言不同
  • char类型也可以进行运算,有对应的unicode编码
  • 若两个string类型赋予相同值,则是赋予同一个内存地址

拓展

//整数拓展 二进制前缀0b 八进制前缀0 十六进制前缀0x
int two = 0b1;
int eight = 07;
int ten = 9;
int sixteen = 0xf;

//浮点数拓展
//银行业务怎么表示钱?
//BigDecimal 数学工具类
//最好完全使用浮点数进行比较
float f = 0.1f;
double d = 1.0/10;

System.out.println(f==d);//结果false

float d1 = 555555555f;
float d2 = d1+1;

System.out.println(d1==d2);//结果true

//字符拓展
char a = 'a';
System.out.println((int)a);
char b = '中';
System.out.println((int)b);
//所以字符的本质还是数字,Unicode表中的对应数字
System.out.println('\u0061');

//布尔值拓展
boolean flag = true;
if(flag==true){}
if(flag){}
//二者等价

//JDK7新特性:数字之间可以用下划线分隔
int money = 10_0000_0000;
System.out.println(money);

基本数据类型转换

  • 自动类型转换:容量小的类型自动转换为容量大的数据类型。
  • 有多种类型的数据混合计算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算。
  • byte short char之间不会互相转换,它们三者在计算时首先转换为int类型。
  • 任何数据类型和String类型进行运算(+),基本类型都会转化为字符串类型
  • Boolean类型无法强制转换

强制类型转换

int a = 0;
byte b = (byte)a;

注意事项

  1. 不能对布尔值进行转换
  2. 不能把对象类型转换为不相干的类型
  3. 转换的时候可能会出现内存溢出或精度问题

运算符

算术运算符

赋值运算符

  • =
  • 当两边数据类型不同,会进行自动数据类型转换或者需要强制类型转换。

位运算符

三元运算符

逻辑表达式?true执行:false执行;

优先级

数组

一维数组

//动态初始化,没有赋值时均为0,字符串则为null
int[] a = new int[3];
//静态初始化
int[] b = {1,2,3};

二维数组

int[][] a = new int[3][2];
int[][] b = new int[3][];
int[][] c = new int[][]{{1,23,4},{4,5,6},{1,2}};//其中长度不等 是合法的
int[][] d = new int[][3];//不合法

int[] e,f[];//e为一维数组 f为二位数组
  1. 数组是相同数据类型(数据类型可以为任意类型)的有序集合数组也是对象。

  2. 数组元素相当于对象的成员变量。

  3. 数组长度的确定的,不可变的。如果越界,则报ArrayIndexOutofBounds