Java Intro

来源:互联网 发布:时时彩开奖动画源码 编辑:程序博客网 时间:2024/06/06 03:17

Java技术体系

 - J2SE 桌面应用的开发     JAVA SE     corejava - J2EE 企业级开发        JAVA EE - J2ME 手机应用的开发     JAVA ME

介绍

SDK  software development kit  软件开发包 函数库或者工具等
JDK  java development kit   是面向开发人员的, java开发工具
JRE  java runtime enviroment java  运行环境, 是面向应用程序使用者的
API  application program interface  应用程序编程接口

windows下的环境变量的配置

JAVA_HOME: JDK安装的目录路径
CLASSPATH: 类加载时候查找的字节码路径
PATH:    JDK安装目录里面的命令目录

linux环境下基本一样的配置

JDK安装后的目录结构

bin :    java的相关命令 
     java javac jar javadoc javap javah

db:   java提供的数据库
demo/sample :  java代码的一些示例
include : C语言的头文件等内容
jre : java的运行环境
lib : java所用的基本的jar包

java的特点

简单性 :   (相对应C和C++来讲) java不需要程序员操作内存
跨平台 :   一次编译, 到处运行 (JVM)
多线程 :   其他语言的多线程一般是系统级别的, java的多线程是语言级别的
动态编译:   (相对应C或者C++来说), 在一个项目中, 如果需要修改一个java文件的话, 那么就修改这一个文件就行了,其他的java文件不需要动

gc

垃圾回收器:   java中有一个线程, 专门负责JVM中垃圾内存的释放
垃圾:      没有引用的内存节点

垃圾回收的算法

注意:
垃圾回收有自己的算法, 我们是不能控制垃圾回收机制的, 虽然有和垃圾回收相关的方法 :  java.lang.System.gc()   java.lang.Runtime.gc(), 但是还是无法控制垃圾回收机制 

编译运行

运行的前提是 : XXX.java文件中 没有写包(package)名
编写的java文件要以XXX.java命令
(注意当前路径和java文件路径要一致)
编译:

javac XXX.java

编译完后会生成一个XXX.class(字节码文件)
运行:

java XXX  (后面不加.class)

可以把字节码文件打成jar包

jar -cvf hello.jar  HelloWorld.class

类加载 :   双亲委托机制

启动类加载
扩展类加载
本地类加载
自定义类加载
网络类加载

JVM

类加载–>字节码验证–>JIT运行

字节码验证:

代码要符合JVM的规范
代码破坏计算机的系统或者硬件
栈不能溢出
方法的参数类型要正确
类型转换要正确

java类名和文件名的关系:

一个java源文件(.java)中,可以有好多个类(class),但是,最多只能有一个类(class)被public修饰

如果有一个类被public修饰,那么这个源文件(.java)的名字就必须和这个被public修饰的类的名字一致,而且还要首字母大写

java文件中的三个顶级元素:

package

  1. 最终会是以文件夹的形式体现出来(有什么包, 就必须有什么文件夹, 运行的时候 .class文件 必须在这个文件夹下面)
  2. .java文件中有多个package的时候, 用 . 分割并且结尾用 ; 号结束 例如:  (com.test;)
  3. 包也是java中类的标识的一部分, 确定某一个类是通过包名加类名来唯一确定的 比如运行java类的时候:
    java package.类名

import

  1. 导包用的关键字
  2. 如果你想在当前这个类使用其他的类, 那么就必须通过这个关键字, 把那个类导入进来
  3. java.lang包下面的类可以直接使用, 不用导入.
  4. 和当前这个类位于同一个包下面的类, 也不需要导入, 可以直接使用

class

java中标识一个类的关键字
(java类中可以没有package, 也可以没有import, 但是一定会class)


建立文件夹并且把.class文件剪切到相应的文件夹里面的操作, 我们可以用命令在编译的时候实现

javac -d . HelloPackage.java

-d 表示编译的同时生产和这个.java文件中定义的包名相一致的是文件夹结构,
. 表示在当前目录下生产这个文件夹(这个不一定非是. 也可以是其他路径)

最后编译完成后的.class文件也会自动的放进生产的文件夹里面

然后我们直接用 package.类名 去运行就可以了


注意: 没有main方法的类是不能直接运行的

因为main方法是程序的入口, 要直接运行的那个类, 类加载之后, JVM没有在这个类中找个main方法, 那么就会报错

JVM只会运行 java命令后面 指定的类中的main方法(如果没有这个方法就报错)