Java_day1

第一部分:什么是java


    Java技术既是一种编程语言,也是一个平台。
    1.1:java是编程语言:
        Java编程语言是一种高级语言,可以用以下所有流行语来表征:
        简单,面向对象,多线程,高性能,强大的,安全

        在Java编程语言中,所有源代码首先以纯文本文件编写,并以.java扩展名结尾。这些源文件然后由javac编译器编译生成.class成文件。一个.class文件不包含的代码是原产于你的处理器; 它代之以字节码 - Java虚拟机1(Java VM)的机器语言。然后,java启动程序工具将使用Java虚拟机的实例运行您的应用程序。

        java 面向对象的语言:以面向对象的形式进行编程。
        java语言  : 数据结构 + 算法 + 内存管理
                数据结构:数据在内存的分布方式
                算法:解决问题的方式
                内存的管理:内存的划分和释放

                 知识点速记: java语言就是用来操作内存中的数据。
                                   : java语言需要先编译然后再运行。

    1.2:java 是一个平台 :
        平台: 是在程序运行的硬件或软件环境,大多数平台可以被描述为操作系统和底层硬件的组合
        流行的平台: window...Mac OS
        java平台有两个组件:
            java虚拟机 和 java应用程序接口

第二部分: java中包含哪些东西


    java = javaSE + javaEE + javaME

    SDK : software development kit  软件开发包 函数库或者工具
    JDK : java development kit  是面向开发人员的,java开发工具
    jre : java runtime enviroment java运行环境,是面向应用程序使用者的

    知识点速记:
        jdk = jre + java提供小工具


第三部分: java可以做什么

    javaSE桌面应用:(逗你玩)
    javaEE企业级网站项目(实战项目演示)
    javaME手机应用

 

第四部分: java的安装配置


    1,java 的下载:SUN公司的java 已经被oracle公司收购。
        : http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
        Java SE Development Kit 8u172部分 勾选Accept License Agreement
        然后选中所需要版本进行下载。
    2,安装jdk ,然后安装jre
    注意:安装目录不要有中文,不要有空格。

    3,配置环境变量:
         window : 1.1:新建JAVA_HOME = jdk安装目录
             1.2:新建classpath:.
             1.3:修改path : 在path的最前面添加java的工具路径,
                 %JAVA_HOME%/bin;

        ubuntu : 在登陆用户的家目录下面:

            配置环境变量(文件: .bashrc  这文件的最后一行开始配置)

            export JAVA_HOME=/home/briup/jdk/jdk1.8.0_172
            export CLASSPATH=.
             export PATH=$JAVA_HOME/bin:$PATH

            配置完了之后,需求让文件立刻生效: source .bashrc

 

第五部分: 安装完成以后的java


   bin : 存放可执行文件
    javac : 编译.java文件 变成.class文件
        cmd : javac Hello.java
    java  : 运行.class文件
        cmd : java Hello
    javadoc:生成java文档
        javadoc   HelloWorld.java
    jar    : 把 .class 文件 变成jar包。
        jar -cvf hello.jar HelloWorld.class
    db  : java提供的数据库
    include : C语言的头文件内容
    jre : java 的运行环境
    lib : java 所用的基本jar包

    知识点速记:
        java 内部有些东西是用C实现的。

 

第六部分 : java的优点


1,简单性 : 面向对象变成,写代码变得非常简单。
2,跨平台 : 一次编译,到处运行。(jvm)
3,多线程 : 其他语言的多线程一般是系统级别的,java的多线程是语言级别的
    线程 : 一个进程下 其他多个任务同时完成
    进程 : 一个应用 运行 会在内存中开辟一块独立的内存空间
4,动态编译: 在一个项目中,如果需要修改一个java文件的话,那么就修改这一个文件就行了,其他的java文件不需要动

5,内存管理方案,gc:垃圾回收机制 : 指的是堆中的内存。

    如果被引用数为0 就是 垃圾

    java中有一个专门负责JVM中垃圾释放的线程。
    垃圾的定义:在堆中的对象,没有任何引用指向这个对象,那么这个对象就是垃圾。
     : 没有引用的内存节点

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

知识点速记:java 一次编译,到处运行。

 

第七部分: java的helloworld例子


    编写java程序.HelloWorld.java

    知识点速记:java代码必须写在方法中,方法必须写在类中,有主方法的类是可以运行的。

        类{
           方法{
            int a = 10;
            syso(a);
           }
        }


第八部分: java代码的类加载机制


   把Hello.class字节码文件中
   Hello类加载到内存的过程
   
   java Hello就会触发java类加载

    类加载:双亲委托机制

    启动类加载    老子(孔子爹)
     /jre/lib/rt.jar
    扩展类加载    孔子
     /jre/lib/ext/*.jar
    本地类加载    孔融
      classpath:.
    什么时候触发类加载?
      java Hello
    
    为了避免类的重复加载


    网络类加载

    思考:为啥要存在这么多类加载?

    双亲委托机制加载类的流程:
        1,执行java HelloWord 命令时候开始类加载(得到加载类的指令)
        2,本地类加载器接到 加载HelloWorld类的指令,但是不做处理,反馈给上级 扩展类加载器
        3,扩展类加载器得到 加载HelloWorld类的指令,但是也不做处理,反馈给上级 启动类加载
        4,启动类加载器得到 加载HelloWorld类的指令,直接处理,进行类加载。加载rt.jar中的类,但是没有加载到HelloWorl的类,接着启动类加载器又把加载 HelloWorld类的指令 向下交给扩展类加载器进行完成
        5,扩展类加载器 得到上级分配的任务:加载HelloWorld类,立刻加载jre/lib/ext/*.jar,但是也没有加载到HelloWorl的类,接着 扩展类加载器又把加载HelloWorld类的指令 向下交给本地类加载器进行完成。
        6,本地类加载器 得到上级分配的任务:加载HelloWorld类,立刻执行加载ClassPath下的类,如果加载到了HelloWorld类 调用main方法执行,如果没有加载到HelloWorld类就报异常,ClassNotFindException 类找不到。


        扩展:可以自己动手把一个class文件打成jar包,放到jre/lib/ext/下,然后 运行jar包中的类,看是否可以运行成功。

第九部分:简单了解java虚拟机

        进行类加载,字节码验证,栈不能溢出,方法的参数类型需要正确,类型转换需要正确。
        把字节码转换为机器码进行运行。
第十部分:java中的顶级元素(顶级关键字)
    
    package + import + class

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

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

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

        带包名的类编写,编译运行.HelloPackage.java
        不要出现中文: 可能会发生中文乱码问题。

         不指定编码的编译    :javac -d bin src/HelloPackage.java
         指定编码为utf-8 : 编译  : javac -encoding utf-8 -d bin src/HelloPackage.java
         运行                    : java -cp bin com.briup.ch01.HelloPackage


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值