• java学习笔记day1


    java学习笔记day1

    2019/5/30正式开启了java学习之路,今天介绍了java的安装配置,java发展历史,入门java案例,按开始老师让让我们用记事本编辑java代码,用命令行编译、运行代码,我认为这还是蛮好的对于初学java的人,如果直接使用一些好用的编辑器,会让我们会略java编译过程,这里指的是.java到.class到cpu的字节码文件。总之,我觉得收获颇多。

    1.什么是JDK,其包括哪些内容

    JDK 是Java开发工具包 (Java Development Kit ) 的缩写。它是一种用于构建在 Java 平台上发布的应用程序、applet 和组件的开发环境。其中包括了Java编译器、JVM、大量的Java工具以及Java基础API里面是Java类库和Java的语言规范.

    JDK主要包括内容:
    a)Java虚拟机:负责解析和执行Java程序.
    Java虚拟机可运行在各种平台上
    b)JDK类库:提供最基础的Java类及各种实用类。
    这些类放在$JAVA_HOME/jre/lib/rt.jar
    java.lang, java.io, java.util,
    javax.swing,java.sql包中的类都位于JDK类库中。
    c)开发工具:这些开发工具都是可执行程序.
    主要包括:位于$JAVA_HOME/bin
    javac.exe 编译工具;
        java.exe 运行工具;
    javadoc.exe 生成JavaDoc文档的工具
    jar.exe 打包工具等。

    2.和java相关的环境变量有那几个,它们有什么作用

    JAVA_HOME: 作用:简化其它变量设置过程中的内容输入。在变量设置过程中有可能要多次使用到JDK的安装路径,如何简化多次输入过程? 可先行将JDK的安装路径定义为一变量,以后凡使用到JDK安装路径的地方均使用该变量进行替换。

    path: 作用:指定执行外部命令时找寻对应可执行文件的路径范围;

    classpath: 作用:代表Java类的根路径。java命令会从classpath中寻找所需的Java类, Java编译器编译Java类时,也会从classpath中寻找所需的Java类。classpath的默认值为当前路径。

    总结:所以只需在PATH中配置jdk的bin目录,意义是能通过命令找到bin目录的exe文件。

    llinux配置 在home目录的 .bashrc配置Path=$PATH:jdk的bin目录。java javac命令验证,

    现在在家目录创建sre(用来存放.java代码)、bin(用来存放.class代码),进入home目录
    第一步:vi src/demo.java
    第二部编写代码:
    public class demo{
    public static void main(String[] args){
    	System.out.println("hello demo");
    }
    }
    第三步 将src下的.java代码编译至bin中
    	javac -d bin src/demo.java
    第四步:运行编译后的.class文件
    	java -cp bin demo    (-cp bin 等价于 -classpath 意义是指定编译的class路径,效果和在环境变量中设置classpath的效果一样,java命令只能编译-cp后的路径中的class文件,默认不设置是相对于当前路径。
    

    3.java的优点

    (1)简单性 相比C,C++而言,Java没有头文件,指针运算,虚基类等

    (2)面向对象

    (3)网络技能:Java的网络能力强大且易于使用

    (4)健壮性:Java编译器能够检测许多在其他语言仅在运行时刻才能够检测出来的问题

    (5)安全性:从一开始,java就被设计成为能够防范各种攻击的语言

    (6)体系结构中立:java虚拟机能够将最频繁的字节码序列翻译成机器码,这一过程成为即时编译

    (7)可移植性:Java的int永远都是32位整数,但在C/C++中,int类型可能是32位整数,也可能是16位整数。

    (8)解释性:Java解释器可以在任何移植了解释器的机器上执行Java字节码。

    (9)高性能:字节码可以在(在运行时刻)快速的翻译成运行这个应用程序的特定cpu字节码。

    4.字节码校验器验证哪些内容

    代码和jvm规范一致

    代码不能破坏系统的完整性

    没有堆栈的上溢和下溢

    参数类型是正确的

    类型转换的正确的

    5.java程序编辑、编译、运行过程

    Java程序的运行必须经过编写 、编译 、运行 三个步骤。

    编写是指在Java开发环境中进行程序代码的输入,最终形成后缀名为.java的Java源文件。

    编译是指使用Java编译器对源文件进行错误排查的过程,编译后将生成后缀名为.class的字节码文件,这不像C语言那样最终生成可执行文件。

    运行是指使用Java解释器将字节码文件翻译成机器代码,执行并显示结果。

    6.java中包的作用

    1. 将功能相近的类放在同一个包中,可以方便查找与使用。

    2. 由于在不同包中可以存在同名类,所以使用包在一定程度上可以避免命名冲突。

    3. 在Java中,某次访问权限是以包为单位的。

    7.GC(垃圾回收机制)

    垃圾收集的概念;
    什么叫垃圾回收:
    1)垃圾:无用对象所占据的内存空间;
    2)垃圾回收:将无用对象所占据内存空间进行回收的过程;
    3)为什么要垃圾回收?
    对象创建,需要占用内存空间,在一个程序运行过程
    中要创建无数个对象,如果对象永久占用内存,那么内存
    很快会消费光,导致后续对象无法创建或者出现内存不足
    的错误。因此必须采取一定措施及时回收那些无用对象的
    内存,这样保证内存可以被重复利用。

    C++等程序由程序员显示进行内存释放,这样有可能:
    c:malloc() free()
    c++:new delete

    1. 忘记内存释放,倒致无端的内存占用;
    2. 释放核心类库占用内存,倒致系统崩溃;

    Java中垃圾回收处理:

    1. 由JVM虚拟机通过一个系统级别的垃圾回收器线程自动完成,
      不会忘记也不会释放错,系统更加稳定;

    Java中垃圾回收处理特点:

    1. 由虚拟机通过垃圾回收器线程自动完成;
      是优先级别比较低的线程。没有办法去
      控制该线程运行。
      进程:是资源分配的最小单位
      线程:是程序运行的最小单位
      2)GC什么情况下工作:
      a)内存空闲时
      b)内存严重不足时
      3)只有当对象不再被使用,它的内存才有可能被回收;
      如果虚拟机认为系统不需要额外的内存,即便对象不再使用内存
    2. 程序无法显式迫使垃圾回收器立即执行垃圾回收,
      可以通过java.lang.System.gc()/java.lang.Runtime.gc()
      建议虚拟机回收对象;
      5)java.lang.System.gc()或者java.lang.Runtime.gc()
      都只是来通知系统应该处理垃圾

    java中垃圾回收处理的算法:
    1)标记清扫法:清扫所有的带有标记的垃圾。
    不会整理内存。
    不会进行数据的搬移,效率快
    2)内存搬移法:将非垃圾的内存搬移到另外一块区域。
    会整理内存
    会进行数据的搬移,效率慢

    8.Java平台代码安全实现策略

    Java虚拟机为Java程序提供运行时环境,
    其中一项重要的任务就是管理类,
    管理类的加载、连接和初始化;

    1. 加载:查找并加载类的二进制文件(class文件),将其置于内存中。
    2. 连接:
      a. 验证:确保被加载类的正确性(有正确的内部结构,并且与其他类协调一致);
      为什么要验证:Java虚拟机不知道某个特定的.class文件
      到底是由正常的Java编译器生成的,还是黑客特制的。
      类的验证能提高程序的健壮性,确保程序被安全地执行。

    类验证内容:
    . 代码和jvm规范一致:语法和版本是否兼容
    . 代码不能破坏系统的完整性
    . 没有堆栈的上溢和下溢
    . 参数类型是正确的
    . 类型转换的正确的

    b. 准备:为类的静态变量分配内存,并将其初始化为默认值;
    c. 解析:把类中的符号引用转换为直接引用(一个指向所调用方法在方法区内的内存位置的指针);
    3) 初始化:给类的静态变量赋予正确的初始值;
    即时编译器(JIT compiler,just-in-time compiler)
    是一个把Java的字节码(包括需要被解释的指令的程序)
    转换成可以直接发送给处理器的指令的程序。
    8020规则:有80%的常用功能只用有20%的常用代码是经常使用的,
    Inter公司。这个是个专业的人区完成的,完成之后会安装
    在JVM中,我们使用就可以了。

    9.定义类、包和应用程序

    1. Java的工作方式:

    源代码: 编写Java源代码文件
    |
    编译器: 用编译器编译源代码。编译器会检查错误,如果有错就要改正才能产生正确的输出。
    |
    输出: 编译器会产生字节码。任何支持Java的装置都能够把它转译成可执行的内容。编译后的字节码与平台无关。
    |
    Java虚拟机: 可以读取与执行字节码。加载指定类,开始执行它的main方法,然后一直运行到main的所有程序代码结束为止。

    1. Java的程序结构:
      a. 源文件:包含Java代码(按java语法规则编写的内容)的文件;
      特征:1)以java作为后缀;
      2)可以包含多个类/接口;
      b.包的声明语句(可有可无,如有只能有一行,且位于最前面);
      包的命名规则:公司域名的倒写.组.功能
      package的作用:
      1)使用文件来进行层次管理的class
      2)在同一个包中不能出现相同的类名,避免命名冲突。
      3)一旦起了包名,类名就发生改变.
      包名.类名====>权限类名
      c.import语句(可有可无, 可有多行,紧跟着包的声明语句);
      d.public class类的声明
      1)类:Java代码组织的单位, Java代码都是以一个个类形式组织的。
      用Java语言编写程序其实就是编写一个个类;一个类里的语
      句内容用大括号括起来,一个类里带有零至多个方法。
      2)一个Java文件中只能有一个public class,可以有多个class
      3)public class修饰的类名必须和文件名一样
      4)类的内容语句,用大括号括起来:属性和方法
      e.public static void main(String[] args)
      1)方法:类似于其它语言里的函数或过程。
      方法里带有零至多行语句。
      2)方法的结构:
      修饰符 返回值类型 方法名字(参数列表){
      方法体(业务逻辑代码)
      }
      3)方法体,用大括号括起来
      4)main方法:Java虚拟机执行Java程序时,首先执行调用的方法。
      main方法又叫程序的入口方法或起点方法。不管你的程序有多大,
      不管你的程序有多少个类,一定都会有一个main()方法来作为程序的起点。

    f.System.out.println():Java中输出语句
    System是java.lang.System类
    out是System中的内部类
    println()是方法
    g.Java的三大顶级元素:
    package
    import
    class

    1. 剖析类:
      public class FirstJavaProgram{
      public static void main(String[] args) {
      System.out.println("Hello Java, I am your fans!");
      }
      }
        public:				公开给其它类存取;
    class:				类声明的关键字;
    FirstJavaProgram:		类的名称;
    void: 				方法的返回值;
    main:				方法的名称;
    String[]:			数组类型;
    args:				参数名称;
    System.out.println:		打印到标准输出上(默认为命令行)
    "Hello Java, I am your fans!":	要输出的字符串内容;
    ;				每一行语句必须用分号结尾;
    

    十. 编码、编译以及运用Java应用程序;
    1)编写:vi 类名.java
    用记事本打开 类名.java
    2)编译:
    javac -d . src/类名.java
    -d:指定编译后的class文件存放的路径。
    编译时连同packge一起编译
    3)运行:
    java 包名.类名

    jar -cvf ch01.jar com 将com打包成ch01.jar
    jar -xvf ch01.jar

    最后希望自己能够熟练在linux中编写代码!!!

  • 相关阅读:
    提交App Store注意事项1
    IOS中NSUserDefaults的用法(轻量级本地数据存储)
    iOS分类中通过runtime添加动态属性
    linux中计划任务执行脚本
    jquery插件Flot的简单讲解
    linux中init.d文件夹的说明
    使用python执行linux命令
    python中logging模块的使用
    策略模式和观察者模式
    ubuntu中将某一程序设置为开机启动项的方法
  • 原文地址:https://www.cnblogs.com/sm1128/p/10951442.html
Copyright © 2020-2023  润新知