JavaSE 基础知识

Java 的三种技术架构

JAVAEE:Java Platform Enterprise Edition,开发企业环境下的应用程序,主要针对web程序开发;

JAVASE:Java Platform Standard Edition,完成桌面应用程序的开发,是其它两者的基础;

JAVAME:Java Platform Micro Edition,开发电子消费产品和嵌入式设备,如手机中的程序;

JDK 和 JRE

1,JDK:Java Development Kit ,java的开发和运行环境,java的开发工具和jre。

2,JRE:Java Runtime Environment,java程序的运行环境,java运行的所需的类库

Java 环境配置

配置JavaHome :
	%JAVA_HOME% = D:\\Program Files (x86)\\Java\\jdk1.7.0 path=%JAVA_HOME%/bin 
配置path
	path=%JAVA_HOME%/bin     
JAVA_HOME相关应用:tomcat

配置环境变量:目的是让java jdk\bin目录下的工具,可以在任意目录下运行,原因是,将该工具所在目录告诉了系统,当使用该工具时,由系统帮我们去找指定的目录。

1 环境变量的配置:

1):永久配置方式:

JAVA_HOME=%安装路径%\Java\jdk

path=%JAVA_HOME%\bin

2):临时配置方式:set path=%path%;C:\Program Files\Java\jdk\bin

特点:系统默认先去当前路径下找要执行的程序,如果没有,再去path中设置的路径下找。

设置JAVA_HOME变量的作用

一、方便引用,比如,JDK安装在D:\Program Files (x86)\Java\jdk1.7.0目录里,则设置JAVA_HOME为该目录路径, 那么以后要使用这个路径的时候, 只需输入%JAVA_HOME%即可, 避免每次引用都输入很长的路径串;

二、归一原则, 当JDK路径被迫改变的时候, 仅需更改JAVA_HOME的变量值即可。

三、第三方软件会引用约定好的JAVA_HOME变量, 典型的就是tomcat服务器,如果不配置JAVA_HOME变量,那么tomcat服务器根本运行不起来

2 path 变量

PATH 环境变量。作用是指定命令搜索路径,在命令行下面执行命令如 javac 编译java程序时,它会到PATH 变量所指定的路径中查找看是否能找到相应的命令程序。我们需要把jdk安装目录下的bin目录增加到现有的 PATH 变量中,bin目录中包含经常要用到的可执行文件如 javac/java/javadoc等待,设置好PATH变量后,就可以在任何目录下执行 javac/java 等工具了。

操作系统用path的路径来找可执行程序(.exe等程序),在windows下当我们敲任何一个命令时,实际上就是在执行一个可执行文件,如输入notepad命令就可以打开一个记事本。

例:在cmd下输入notepad命令就可以打开一个记事本。

notepad.exe所在的Windows目录已经添加到了Path环境变量中,实际上是执行了c:\Windows下的notepad.exe这个可执行文件

3 classpath的配置:

1):永久配置方式:classpath=.;c:;e:

2):临时配置方式:set classpath=.;c:;e:

4 javac命令和java命令

要知道java是分两部分的:一个是编译,一个是运行。

javac:负责的是编译的部分,当执行javac时,会启动java的编译器程序。对指定扩展名的.java文件进行编译。生成了jvm可以识别的字节码文件。也就是class文件,也就是java的运行程序。

java:负责运行的部分.会启动jvm.加载运行时所需的类库,并对class文件进行执行.

一个文件要被执行,必须要有一个执行的起始点,这个起始点就是main函数.

Java 基本语法

  • 关键字
  • 标识符
  • 常量和变量
  • 数据类型
  • 运算符
  • 语句
  • 访问修饰符
  • 函数

1 关键字

关键字:其实就是某种语言赋予了特殊含义的单词。

保留字:其实就是还没有赋予特殊含义,但是准备日后要使用过的单词。

关键字总览

详情:java关键字及其作用

2 标识符

标识符:其实就是在程序中自定义的名词。比如类名,变量名,函数名。包含 0-9、a-z、$、_ ;

注意

1)不可以以数字开头。

2)不可以使用关键字。

3)标识符大小写敏感

3 常量 和 变量

常量:是在程序中的不会变化的数据。

变量:其实就是内存中的一个存储空间,用于存储常量数据。

作用:方便于运算。因为有些数据不确定。所以确定该数据的名词和存储空间。

特点:变量空间可以重复使用。

什么时候定义变量? 只要是数据不确定的时候,就定义变量。

变量空间的开辟需要什么要素呢?

1,这个空间要存储什么数据?数据类型

2,这个空间叫什么名字啊?变量名称

3,这个空间的第一次的数据是什么? 变量的初始化值

变量的作用域和生存期:

变量的作用域: 作用域从变量定义的位置开始,到该变量所在的那对大括号结束;

生命周期: 变量从定义的位置开始就在内存中活了;变量到达它所在的作用域的时候就在内存中消失了;

4 数据类型

1):基本数据类型:byte、short、int、long、float、double、char、boolean

2):引用数据类型: 数组、类、接口。

级别从低到高为: byte,char,short(这三个平级)–>int–>float–>long–>double

自动类型转换:从低级别到高级别,系统自动转的;

强制类型转换:什么情况下使用把一个高级别的数赋给一个别该数的级别低的变量;

unicode码范围

汉字:[\u4e00,\u9fa5]

数字:[0x30,0x39]

小写字母:[0x61,0x7a]

大写字母:[0x41,0x5a]

5 运算符

  1. 算术运算符。
    符号 + - * / %
    % :任何整数模2不是0就是1,所以只要改变被模数就可以实现开关运算。
    + :连接符。
    ++,–-

  2. 赋值运算符。

    = +=, -=, *=, /= , %=

  3. 比较运算符。 ==
    特点:该运算符的特点是:运算完的结果,要么是true,要么是false。

  4. 逻辑运算符。
    & , | , ^
    ! ,&& , ||
    逻辑运算符除了 ! 外都是用于连接两个boolean类型表达式。

  • &: 只有两边都为true结果是true。否则就是false。
  • |: 只有两边都为false结果是false,否则就是true
  • ^: 异或:和或有点不一样。
    两边结果一样,就为false。
    两边结果不一样,就为true.
  • & 和 &&区别:
    & :无论左边结果是什么,右边都参与运算
    &&:短路与,如果左边为false,那么右边不参与运算。
  • | 和|| 区别:
    |:两边都运算。
    ||:短路或,如果左边为true,那么右边不参与运算。
  1. 位运算符:用于操作二进制位的运算符。
    & | ^
    & << >> >>>(无符号右移)

练习:对两个变量的数据进行互换。不需要第三方变量。

int a = 3,b = 5;-->b = 3,a = 5; 
a = a + b; a = 8; 
b = a - b; b = 3; 
a = a - b; a = 5;   

a = a ^ b;// 
b = a ^ b;//b = a ^ b ^ b = a 
a = a ^ b;//a = a ^ b ^ a = b; 

6 语句

If、 switch 、do while 、while 、for

1)、当判断固定个数的值的时候,可以使用if,也可以使用switch。

2)、当判断数据范围,获取判断运算结果boolean类型时,需要使用if。

3)、当某些语句需要执行很多次时,就用循环结构。 while和for可以进行互换。

  • 区别在于:如果需要定义变量控制循环次数。建议使用for。因为for循环完毕,变量在内存中释放。

break: 作用于switch ,和循环语句,用于跳出,或者称为结束。

break语句单独存在时,下面不要定义其他语句,因为执行不到,编译会失败。当循环嵌套时,break只跳出当前所在循环。要跳出嵌套中的外部循环,只要给循环起名字即可,这个名字称之为标号。

continue:只作用于循环结构,继续循环用的。

作用:结束本次循环,继续下次循环。该语句单独存在时,下面不可以定义语句,执行不到。

7 访问修饰符

java中的访问修饰符

  • public: 所有
  • protected: 自己、同一包中、子类可以访问
  • default: 默认什么都不加,就是default,自己、同一包中可以访问,但是比protected级别要低即限制更多
  • private: 自己

8 函数

函 数:为了提高代码的复用性,可以将其定义成一个单独的功能,该功能的体现就是java中的函数。

函数定义的格式

修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数1,…){  执行语句;  return 返回值; } 
  • 没有具体的返回值时,返回的返回值类型用void关键字表示。
  • 如果函数的返回值类型是void时,return语句可以省略不写的,系统会帮你自动加上。
  • return的作用:结束函数。结束功能。

如何定义一个函数

函数其实就是一个功能,定义函数就是实现功能,通过两个明确来完成:

1)明确该功能的运算完的结果,其实是在明确这个函数的返回值类型。

2)在实现该功能的过程中是否有未知内容参与了运算,其实就是在明确这个函数的参数列表(参数类型&参数个数)。

函数的作用

1)、用于定义功能。

2)、用于封装代码提高代码的复用性。

注意:函数中只能调用函数,不能定义函数。

主函数:

保证该类的独立运行。因为它是程序的入口。因为它在被jvm调用。

主函数的构成

  • Public:访问权限最大。
  • static:不需要对象,直接类名即可。
  • void:主函数没有返回值。
  • Main:主函数特定的名称。
  • (String[] args):主函数的参数,是一个字符串数组类型的参数,jvm调用main方法时,传递的实际参数是 new String[0]。

jvm默认传递的是长度为0的字符串数组,我们在运行该类时,也可以指定具体的参数进行传递。可以在控制台,运行该类时,在后面加入参数。参数之间通过空格隔开。jvm会自动将这些字符串参数作为args数组中的元素,进行存储。

函数定义名称是为什么呢?

1)、为了对该功能进行标示,方便于调用

2)、为了通过名称就可以明确函数的功能,为了增加代码的阅读性

重载

重载的定义是:在一个类中,如果出现了两个或者两个以上的同名函数,只要它们的参数的个数,或者参数的类型不同,即可称之为该函数重载了。

如何区分重载:当函数同名时,只看参数列表。和返回值类型没关系。

覆盖:当子类重写父类中的方法时,若子类方法的参数列表与父类完全相同,则表示子类覆盖了父类的该方法。

重载的条件

a)发生在同一个类或者父子类之间

b)方法名称相同,参数列表(参数的个数,参数的数据类型、参数的顺序)不同

c)返回值无所谓

d)访问权限无所谓

歧义重载:

ma(12,34)//歧义重载,编译错误  
public void ma(int i,double j){
//打印1
}  
public void ma(double i,int j){
//打印2
}

构造器重载:

this:

this.成员(字段、方法):调用本类的字段、方法

this(参数列表):调用本类的其他构造方法,必须在构造方法的第一句

public Person(int age){
	this(age,””);//调用下面那个构造器
}
public Person(int age,String name){
	this.age= age;//调用本类的字段
	this.name= name;
}
public Person(int age){
	this(age,””);//调用下面那个构造器
}
public Person(int age,String name){
	this.age= age;//调用本类的字段
	this.name= name;
}

super:父类的对象

super.成员:调用父类的成员(方法、字段)

super(参数列表):调用父类的构造方法,必须位于子类构造方法的第一句

  • 如果父类中没有无参的构造器,在子类中必须显式的调用父类带参数的构造方法(super(参数类表或者this(参数列表)));
  • 如果父类有无参的构造器,则子类中可以不用显式调用父类的构造器,因为系统默认调用super()(在子类构造器的第一句位置);

重写父类的成员(方法) 多态

重写的条件 :

a)发生在父子类之间

b)方法名称相同,参数列表(参数的个数,参数的数据类型、参数的顺序)相同

c)返回值必须相同

d)子类覆盖方法的访问权限大于等于父类被覆盖方法的访问权限

e)子类不能抛出比父类异常更大的异常(RuntimeException例外)