zoukankan      html  css  js  c++  java
  • 第一章 corejava的入门

    第一章 corejava的入门
    一:什么是语言
    语言=os+数据结构+算法+思想
    os:操作系统
    数据结构:队,栈,二叉树,链表
    算法:做游戏开发时非常重要
    面试题:int a>0,b>0只使用一条输出语句输出a,b的最大值
    System.out.println((|a+b|+|a-b|)/2);

    二:安装jdk
    1)根据不同的操作系统下载不同的jdk
    Java有三个版本:
    Java SE:开发桌面应用程序,比如QQ
    Java EE:开发企业级应用程序
    Java ME:开发移动应用
    2)安装jdk
    如果是windows,直接双击
    如果是unix,在shell中运行
    a)拷贝到家目录
    b)sudo chmod 777 /opt
    c)cp jdk_8u32_liunx_i586.bin /opt
    d)cd /opt
    e)sudo ./jdk_8u32_liunx_i586.bin
    如果是unix的.tar.gz文件:
    a)将tar.gz拷贝到家目录并解压
    b)sudo chmod 777 /opt
    c)sudo mv jdk1.7.0_04 /opt
    3)配置环境变量
    在.bashrc中配置环境变量,打开该文件,追加内容
    vi ~/.bashrc
    //添加以下内容
    CLASSPATH=.
    JAVA_HOME=/opt/jdk1.8.0_32
    PATH=$PATH:$JAVA_HOME/bin
    export CLASSPATH JAVA_HOME PATH
    CLASSPATH指定类加载的路径
    JAVA_HOME指定JDK的安装目录
    三:JDK:java Development kit
    Sun公司在推出Java语言的同时,也推出了Java的一系列开发工具,
    如JDK—— Java Development Kit(Java开发工具包)。
    可以从网上免费下载。通常以JDK的版本来定义Java的版本。
    时间 版本 在Java标准函数库中的类(class)的数量
    ----------------------------------------------------------------------
    1996 JDK1.0(Java1.0) 250 重点applet
    1997 JDK1.1(Java1.1) 500 比较适于开发图形界面
    1998 JDK1.2(Java2) 2300 可达到平台原始速度,
    可用于书写正规企业级应用程序或移动应用程序
    2000 JDK1.3(Java2)
    2002 JDK1.4(Java2) 计算能力大幅度提升
    2004 JDK1.5(Java5.0)代号Tiger老虎3500 对语言本身作重大改变, 更稳定、更安全、更高效
    2006 JDK1.6(Java6.0)代号Mustang野马
    2009 JDK1.7(Java7.0)代号Dolphin海豚
    2014 JDK1.8(Java8.0)
    2009年04月20日,甲骨文74亿美元收购Sun。取得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 打包工具等。

    四: 理解Java语言特征;
    Java语言包括语法规则和语法规则的实现。
    Sun公司对Java语言有自己的一份参考实现:JDK。
    a. 编程语言:语言本质即规则: 字符集、词法规则、句法规则(条件语句、循环语句等);桌面应用程序 :拥有图形化用户接口的软件;服务器应用程序:通过浏览器访问运行;
    b. 开发环境:开发程序,不管是桌面应用还是服务器应用,均需要JDK的支持。
    c. 应用环境:面向应用程序,而不是开发系统程序或者硬件编程,比如说驱动就是系统程序,系统程序一般用c语言
    d. 部署环境:服务器应用程序需部署运行在服务器应用程序上,服务器本身也是一个Java程序,用Java语言编写的服务器应用程序部署运行时也需要Java语言的支持,将java代码打成一个包,部署到服务器这个过程叫做部署环境

    五. 为什么发明Java?
    为什么发明了java,换而言之,java有哪些优点呢?
    a. 提供一个解释环境-----》JVM
    1) 加速开发: Java当初目的是开发适用于智能化电子消费设备上的软件,它是基于C++语言,但做了简化,能加速软件的开发过程
    2) 一次编译到处运行: 跨平台
    3) 多线程:多线程编程的简单性是Java成为流行的服务器端开发语言的主要原因之一
    4) 支持动态更新: 软件代码文件的替换即更新,
    类与类之间有调用,如果其中某
    一个改变不会影响其他程序。
    并且也不需要都编译打包。只需要做
    软件代码文件的替换操作。

    b. 提供一个比较容易的方式编程
    1) 更健壮:没有指针、没有内存管理;
    在开发者层面上没有指针,但是在底层还是有指针。
    Java引入了引用的概念。
    C:malloc()手动分配内存,free()手动释放内存
    C++:new手动分配内存,delete()手动释放内存
    手动释放内存对内存回收比较好。但是也有
    释放错误(释放一个已经释放的内存,
    释放一个没有开辟的内存)
    Java开发程序员不需要关心什么时候释放内存。
    由GC垃圾回收器来管理内存的回收。
    2) 纯粹的面向对象的编程:在Java中认为一切均是对象,
    对象有属性以及改变属性值的方法。通过Java编程围绕
    着构建对象的模板、实例化对象、调用对象的方法和属性等来进行。
    c. 那么如何实现上面这些呢?
    虚拟机JVM提供一个解释环境,让java代码可以运行。
    垃圾回收机制让程序员无需在代码中进行内存管理。
    代码安全校验保证java代码的安全性。

    六. 理解Java虚拟机的特征;
    Jvm是什么?简称java 虚拟机(java virtual machine),
    是用软件来模拟一个虚拟的环境。我们用java编写的源程
    序经过编译以后生成字节码文件,Jvm 提供了一个解释运
    行 java字节码文件的环境,只要在不同操作系统上安装了
    jvm后,就能对同一个java程序进行解释运行,这就java的
    跨平台,一次编译,到处运行。

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

    C++等程序由程序员显示进行内存释放,这样有可能:
    c:malloc() free()
    c++:new delete
    1) 忘记内存释放,倒致无端的内存占用;
    2) 释放核心类库占用内存,倒致系统崩溃;

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

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

    java中垃圾回收处理的算法:
    1)标记清扫法:清扫所有的带有标记的垃圾。
    不会整理内存。
    不会进行数据的搬移,效率快
    2)内存搬移法:将非垃圾的内存搬移到另外一块区域。
    会整理内存
    会进行数据的搬移,效率慢
    八. 阐述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中,我们使用就可以了。

    九. 定义类、包和应用程序;

    1) Java的工作方式:

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

    2) 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

    3) 剖析类:
    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

  • 相关阅读:
    彻底理解ThreadLocal(转)
    javascript中神奇的(+)加操作符
    quartz集群调度机制调研及源码分析---转载
    quartz源码解析--转
    通过Spring @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作
    LeetCode 917. Reverse Only Letters (仅仅反转字母)
    LeetCode 893. Groups of Special-Equivalent Strings (特殊等价字符串组)
    LeetCode 824. Goat Latin (山羊拉丁文)
    LeetCode 443. String Compression (压缩字符串)
    LeetCode 387. First Unique Character in a String (字符串中的第一个唯一字符)
  • 原文地址:https://www.cnblogs.com/Diyo/p/11078994.html
Copyright © 2011-2022 走看看