Java基础知识总结分享

好程序员Java培训分享Java基础知识总结java

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

2,JRE:Java Runtime Environment,java程序的运行环境,java运行的所需的类库+JVM(java虚拟机)。程序员

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

环境变量的配置:函数

1)永久配置方式:JAVA_HOME=%安装路径%\Java\jdk工具

path=%JAVA_HOME%\bin开发工具

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

特色:系统默认先去当前路径下找要执行的程序,若是没有,再去path中设置的路径下找。命令行

classpath的配置:对象

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

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

注意:在定义classpath环境变量时,须要注意的状况

若是没有定义环境变量classpath,java启动jvm后,会在当前目录下查找要运行的类文件;

若是指定了classpath,那么会在指定的目录下查找要运行的类文件。

还会在当前目录找吗?两种状况:

CLASSPATH是什么?它的做用是什么?

它是javac编译器的一个环境变量。它的做用与import、package关键字有关。当你写下improt java.util.*时,编译器面对import关键字时,就知道你要引入java.util这个package中的类;可是编译器如何知道你把这个package放在哪里了呢?因此你首先得告诉编译器这个package的所在位置;如何告诉它呢?就是设置CLASSPATH啦 :) 若是java.util这个package在c:/jdk/ 目录下,你得把c:/jdk/这个路径设置到CLASSPATH中去!当编译器面对import java.util.*这个语句时,它先会查找CLASSPATH所指定的目录,并检视子目录java/util是否存在,而后找出名称吻合的已编译文件(.class文件)。若是没有找到就会报错!CLASSPATH有点像c/c++编译器中的INCLUDE路径的设置哦,是否是?当c/c++编译器遇到include 这样的语句,它是如何运做的?哦,其实道理都差很少!搜索INCLUDE路径,检视文件!当你本身开发一个package时,而后想要用这个package中的类;天然,你也得把这个package所在的目录设置到CLASSPATH中去!CLASSPATH的设定,对JAVA的初学者而言是一件棘手的事。因此Sun让JAVA2的JDK更聪明一些。你会发现,在你安装以后,即便彻底没有设定CLASSPATH,你仍然可以编译基本的JAVA程序,而且加以执行。

PATH环境变量

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

4,javac命令和java命令作什么事情呢?

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

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

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

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

标示符:

1),数字不能够开头。

2),不可使用关键字。

变量的做用域和生存期:

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

生命周期:变量从定义的位置开始就在内存中活了;

变量到达它所在的做用域的时候就在内存中消失了;

数据类型:

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

运算符号:

4)、逻辑运算符。

& | ^ ! && ||

逻辑运算符除了 ! 外都是用于链接两个boolean类型表达式。

&: 只有两边都为true结果是true。不然就是false。

|:只要两边都为false结果是false,不然就是true

^:异或:和或有点不同。

两边结果同样,就为false。

两边结果不同,就为true.

& 和 &&区别: & :不管左边结果是什么,右边都参与运算。

&&:短路与,若是左边为false,那么右边不参数与运算。

| 和|| 区别:|:两边都运算。

||:短路或,若是左边为true,那么右边不参与运算。

5)、位运算符:用于操做二进制位的运算符。

& | ^

<< >> >>>(无符号右移)

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

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;

练习:高效的算出 2*8 = 2<<3;

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

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

重写:父类与子类之间的多态性,对父类的函数进行从新定义。若是在子类中定义某方法与其父类有相同的名称和参数,咱们说该方法被重写 (Overriding)。

Java内存管理

Java内存管理:深刻Java内存区域

Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来。

  概述:

对于从事C和C++程序开发的开发人员来讲,在内存管理领域,他们既是拥有最高权力的皇帝,又是从事最基础工做的劳动人民—既拥有每个对象的"全部权",又担负着每个对象生命开始到终结的维护责任。

对于Java程序员来讲,在虚拟机的自动内存管理机制的帮助下,再也不须要为每个new操做去写配对的delete/free代码,并且不容易出现内存泄漏和内存溢出问题,看起来由虚拟机管理内存一切都很美好。不过,也正是由于Java程序员把内存控制的权力交给了Java虚拟机,一旦出现内存泄漏和溢出方面的问题,若是不了解虚拟机是怎样使用内存的,那排查错误将会成为一项异常艰难的工做。