JavaSE 基础知识
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 运算符
-
算术运算符。
符号 + - * / %
% :任何整数模2不是0就是1,所以只要改变被模数就可以实现开关运算。
+ :连接符。
++,–- -
赋值运算符。
= +=, -=, *=, /= , %=
-
比较运算符。 ==
特点:该运算符的特点是:运算完的结果,要么是true,要么是false。 -
逻辑运算符。
& , | , ^
! ,&& , ||
逻辑运算符除了 ! 外都是用于连接两个boolean类型表达式。
- &: 只有两边都为true结果是true。否则就是false。
- |: 只有两边都为false结果是false,否则就是true
- ^: 异或:和或有点不一样。
两边结果一样,就为false。
两边结果不一样,就为true. - & 和 &&区别:
& :无论左边结果是什么,右边都参与运算。
&&:短路与,如果左边为false,那么右边不参与运算。 - | 和|| 区别:
|:两边都运算。
||:短路或,如果左边为true,那么右边不参与运算。
- 位运算符:用于操作二进制位的运算符。
& | ^
& << >> >>>(无符号右移)
练习:对两个变量的数据进行互换。不需要第三方变量。
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例外)