技术总结
软件:一系列按照特定顺序组织的计算机数据和指令
程序:完成指令功能的一条指令
计算机语言:人与机器沟通的语言,分为机器语言,汇编语言,高级语言
机器语言:由一段0和1的二进制代码所组成的语言,机器语言是直接由电脑CPU进行执行
汇编语言:称符号语言,adp、ax、bx、
高级语言:分为面向过程和面向对象
脚本语言(Script language,scripting language,scripting programming language)是为了缩短传统的编写-编译-链接-运行(edit-compile-link-run)过程而创建的计算机编程语言。此命名起源于一个脚本“screenplay”,每次运行都会使对话框逐字重复。早期的脚本语言经常被称为批量处理语言或工作控制语言。一个脚本通常是解释运行而非编译。脚本语言通常都有简单、易学、易用的特性,目的就是希望能让程序员快速完成程序的编写工作。而宏语言则可视为脚本语言的分支,两者也有实质上的相同之处。虽然许多脚本语言都超越了计算机简单任务自动化的领域,成熟到可以编写精巧的程序,但仍然还是被称为脚本。几乎所有计算机系统的各个层次都有一种脚本语言。包括操作系统层,如计算机游戏,网络应用程序,字处理文档,网络软件等。在许多方面,高级编程语言和脚本语言之间互相交叉,二者之间没有明确的界限

源代码:某种计算机语言编写的内容
编译:将源代码转化成机器代码
代码的执行:源代码通过编译(编译器:负责编译的工具)转换为机器代码
开发的过程:编码(code)-----编译(compile)------运行(run)
c#编译器:在源代码中符号尽量全部用英文符号
c盘----Windows----Microsoft.net----framework----v4.0-----csc.exe----windows+r-----cmd—cd csc的绝对路径 回车-----csc 、out :d:\myfirst.ese d:\ myfirstprogram.txt回车
开发工具 lde(集成开发环境)用于开发软件的工具 Java所用的是Eelipse c#Visualstudio
程序错误

  1. 代码规范错误
    写代码时没有遵循语法规则出现的错误
  2. 逻辑错误
    运行后得到的结果与预期结果不符合
  3. 运行错误
    运行过程中出现的错误,如在求a/b中b输入时为0,会出现错误

PC操作系统分类:

  1. UNIX
    UNIX操作系统(尤尼斯),是一个强大的多用户、多任务操作系统,支持多种处理器架构,按照操作系统的分类,属于分时操作系统,最早由KenThompson、Dennis Ritchie和Douglas McIlroy于1969年在AT&T的贝尔实验室开发。目前它的商标权由国际开放标准组织所拥有,只有符合单一UNIX规范的UNIX系统才能使用UNIX这个名称,否则只能称为类UNIX(UNIX-like)。
  2. LINUX
    Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。有多个版本,例如:ubutu,centos。
  3. WINDOWS
    Microsoft Windows,是美国微软公司研发的一套操作系统,它问世于1985年,起初仅仅是Microsoft-DOS模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。
    Windows采用了图形化模式GUI,比起从前的DOS需要键入指令使用的方式更为人性化。随着电脑硬件和软件的不断升级,微软的Windows也在不断升级,从架构的16位、32位再到64位, 系统版本从最初的Windows 1.0 到大家熟知的Windows 95、Windows 98、Windows ME、Windows 2000、Windows 2003、Windows XP、Windows Vista、Windows 7、Windows 8、Windows 8.1、Windows 10 和 Windows Server服务器企业级操作系统,不断持续更新,微软一直在致力于Windows操作系统的开发和完善。
    Java是一种计算机编程语言,拥有跨平台、面向对象、泛型编程的特性,广范应用于企业级Web应用开发和移动应用开发。
    1991 年Sun公司的James Gosling等人开始开发名称为 Oak 的语言。希望用于控制嵌入在有线电视交换盒、PDA等的微处理器
    1994年将Oak语言更名为Java
    1998年JDK1.2时,更名为Java 2 Platform
    分为标准版J2SE,企业版J2EE,微型版J2ME
    2000年5月8日,JDK1.3发布
    2000年5月29日,JDK1.4发布
    2001年6月5日,NOKIA宣布,到2003年将出售1亿部支持Java的手机
    2001年9月24日,J2EE1.3发布
    2002年2月26日,J2SE1.4发布,自此Java的计算能力有了大幅提升
    Java在1.5版本时,做了重大改变,太阳公司并1.5版本重命名为Java 5.0
    Java 既安全、可移植,又可跨平台,而且人们发现它能够解决Internet 上的大型应用问题
    Internet使Java成为网上最流行的编程语言
    Java对Internet的影响也意义深远
    B/S的兴起 & C/S的没落
    语言特性
    Java之所以被开发,是要达到以下五个目的:
    应当使用面向对象程序设计方法学
    应当允许同一程序在不同的计算机平台执行
    应当包括内建的对计算机网络的支持
    应当被设计成安全地执行远端代码
    应当易于使用,并借鉴以前那些面向对象语言(如C++)的长处。
    Java技术主要分成几个部分:Java语言、Java运行环境、类库。一般情况下说Java时并不区分指的是哪个部分。
    Java平台分为哪几种版本
    JAVASE (标准版桌面应用) JAVAEE (企业版服务器) JAVAME(微型版如手机)
    JIT,其作用是什么?
    JIT是just in time,即时编译器。把重复的代码提前解释翻译成当前操作平台的二进制语言
    程序翻译的方式有哪几种,有什么区别
    编译(如同直接将英文文章翻译成中文文章):每次执行的时候就可以直接执行这个翻译好的二进制文件了,这样的程序只需要翻译一次,效率明显要高很多。
    解释(如同同声翻译):执行一句翻译一句,这种方式每次运行程序时都要重新翻译整个程序,效率较低,执行速度慢。

Java程序的基本构造单元是类
Java代码中main方法如何书写main(String[] args){}
字节码(如同kb是个装东西的容器)是一套设计用来在Java 运行时系统下执行的高度优化的指令集。

Java特点
java属于半解释半编译语言
语言有下面一些特点 :简单、面向对象、平台无关性、安全、多线程以及动态性。
  1.面向对象
  Java语言的设计集中于对象及其接口 ,它提供了简单的类机制以及动态的接口模型。对象中封装了它的状态变量以及相应的方法 ,实现了模块化和信息隐藏 ;而类则提供了一类对象的原型 ,并且通过继承机制 ,子类可以使用父类所提供的方法 ,实现了代码的复用。
  分布性
  Java是面向网络的语言。通过它提供的类库可以处理 TCP/IP协议 ,用户 可以通过 URL地址在网络上很方便地访问其它对象。
  简单性
  Java语言是一种面向对象的语言 ,它通过提供最基本的方法来完成指定的任务 ,只需理解一些基本的概念 ,就可以用它编写出适合于各种情况的应用程序。 Java略去了运算符重载、多重继承等模糊的概念 ,并且通过实现自动垃圾收集大大简化了程序设计者的内存管理工作。另外 ,Java也适合于在小型机上运行 ,它的基本解释器及类的支持只有 40KB左右 ,加上标准类库和线程的支持也只有 215KB左右。库和线程的支持也只有 215KB左右。
  
 
 平台无关性
每个操作系统平台都有java对应的虚拟机,在虚拟机中有不同操作系统平台的解释器、即时编译器,可以翻译成不同操作系统平台的二进制语言。
 安全性
  用于网络、分布环境下的 Java必须要防止病毒的入侵。 Java不支持指针,一切对内存的访问都必须通过对象的实例变量来实现 ,这样就防止程序员使用"特洛伊 "木马等欺骗手段访问对象的私有成员 ,同时也避免了指针操作中容易产生的错误。
  
  多线程
  多线程机制使应用程序能够并行执行 ,而且同步机制保证了对共享数据的正确操作。通过使用多线程 ,程序设计者可以分别用不同的线程完成特定的行为 ,而不需要采用全局的事件循环机制 ,这样就很容易地实现网络上的实时交互行为。

JVM虚拟机
虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
指令系统
JVM指令系统同其他计算机的指令系统极其相似。Java指令也是由操作码和操作数两部分组成。操作码为8位二进制数,操作数进紧随在操作码的后面,其长度根据需要而不同。操作码用于指定一条指令操作的性质(在这里我们采用汇编符号的形式进行说明),如iload表示从存储器中装入一个整数,anewarray表示为一个新数组分配空间,iand表示两个整数的"与",ret用于流程控制,表示从对某一方法的调用中返回。当长度大于8位时,操作数被分为两个以上字节存放。JVM采用了"big endian"的编码方式来处理这种情况,即高位bits存放在低字节中。这同 Motorola及其他的RISC CPU采用的编码方式是一致的,而与Intel采用的"little endian "的编码方式即低位bits存放在低位字节的方法不同。Java指令系统是以Java语言的实现为目的设计的,其中包含了用于调用方法和监视多线程系统的指令。Java的8位操作码的长度使得JVM最多有256种指令,java1.6及以上版本已使用了160多种操作码。
寄存器
所有的CPU均包含用于保存系统状态和处理器所需信息的寄存器组。如果虚拟机定义较多的寄存器,便可以从中得到更多的信息而不必对栈或内存进行访问,这有利于提高运行速度。然而,如果虚拟机中的寄存器比实际CPU的寄存器多,在实现虚拟机时就会占用处理器大量的时间来用常规存储器模拟寄存器,这反而会降低虚拟机的效率。针对这种情况,JVM只设置了4个最为常用的寄存器。它们是:pc程序计数器optop操作数栈顶指针frame当前执行环境指针 vars指向当前执行环境中第一个局部变量的指针 所有寄存器均为32位。pc用于记录程序的执行。optop,frame和vars用于记录指向Java栈区的指针。
栈结构
作为基于栈结构的计算机,Java栈是JVM存储信息的主要方法。当JVM得到一个Java字节码应用程序后,便为该代码中一个类的每一个方法创建一个栈框架,以保存该方法的状态信息。每个栈框架包括以下三类信息:局部变量,执行环境,操作数栈。
局部变量用于存储一个类的方法中所用到的局部变量。vars寄存器指向该变量表中的第一个局部变量。
执行环境用于保存解释器对Java字节码进行解释过程中所需的信息。它们是:上次调用的方法、局部变量指针和操作数栈的栈顶和栈底指针。执行环境是一个执行一个方法的控制中心。例如:如果解释器要执行iadd(整数加法),首先要从frame寄存器中找到当前执行环境,而后便从执行环境中找到操作数栈,从栈顶弹出两个整数进行加法运算,最后将结果压入栈顶。
操作数栈用于存储运算所需操作数及运算的结果。
碎片回收堆
Java类的实例所需的存储空间是在堆上分配的。解释器具体承担为类实例分配空间的工作。解释器在为一个实例分配完存储空间后,便开始记录对该实例所占用的内存区域的使用。一旦对象使用完毕,便将其回收到堆中。在Java语言中,除了new语句外没有其他方法为一对象申请和释放内存。对内存进行释放和回收的工作是由Java运行系统承担的。这允许Java运行系统的设计者自己决定碎片回收的方法。在SUN公司开发的Java解释器和Hot Java环境中,碎片回收用后台线程的方式来执行。这不但为运行系统提供了良好的性能,而且使程序设计人员摆脱了自己控制内存使用的风险。
存储区
JVM有两类存储区:常量缓冲池和方法区。常量缓冲池用于存储类名称、方法和字段名称以及串常量。方法区则用于存储Java方法的字节码。对于这两种存储区域具体实现方式在JVM规格中没有明确规定。这使得Java应用程序的存储布局必须在运行过程中确定,依赖于具体平台的实现方式。JVM是为Java字节码定义的一种独立于具体平台的规格描述,是Java平台独立性的基础。尽管JVM还存在一些限制和不足,有待于进一步的完善,但无论如何,JVM的思想是成功的。对比分析:如果把Java原程序想象成我们的C++原程序,Java原程序编译后生成的字节码就相当于C++原程序编译后的80x86的机器码(二进制程序文件),JVM虚拟机相当于80x86计算机系统,Java解释器相当于80x86CPU。在80x86CPU上运行的是机器码,在Java解释器上运行的是Java字节码。
Java解释器相当于运行Java字节码的“CPU”,但该“CPU”不是通过硬件实现的,而是用软件实现的。Java解释器实际上就是特定的平台下的一个应用程序。只要实现了特定平台下的解释器程序,Java字节码就能通过解释器程序在该平台下运行,这是Java跨平台的根本。当前,并不是在所有的平台下都有相应Java解释器程序,这也是Java并不能在所有的平台下都能运行的原因,它只能在已实现了Java解释器程序的平台下运行。
Java代码编译过程
代码编译是由Javac编译器来完成,
Javac是一种编译器,能将一种语言规范转化成另外一种语言规范,通常编译器都是将便于人理解的语言规范转化成机器容易理解的语言规范,如C/C++或者汇编语言都是将源代码直接编译成目标机器码,这个目标机器代码是CPU直接执行的指令集合。这些指令集合也就是底层的一种语言规范。
Javac的编译器也是将Java这种对人非常友好的编程语言编译成对对所有机器都非常友好的一种语言。这种语言不是针对某种机器或某个平台。怎么消除不同种类,不同平台之间的差异这个任务就有JVM来完成,而Javac的任务就是将Java源代码语言转化为JVM能够识别的一种语言,然后由JVM将JVM语言再转化成当前这个机器能够识别的机器语言。
Javac的任务就是将Java源代码编译成Java字节码,也就是JVM能够识别的二进制代码,从表面看是将.java文件转化为.class文件。而实际上是将Java源代码转化成一连串二进制数字,这些二进制数字是有格式的,只有JVM能够真确的识别他们到底代表什么意思。
编译器把一种语言规范转化为另一种语言规范的这个过程需要哪些步骤?回答这个问题需要参照《编译原理》,总结过程如下:
1)词法分析:读取源代码,一个字节一个字节的读进来,找出这些词法中我们定义的语言关键词如:if、else、while等,识别哪些if是合法的哪些是不合法的。这个步骤就是词法分析过程。
词法分析的结果:就是从源代码中找出了一些规范化的token流,就像人类语言中,给你一句话你要分辨出哪些是一个词语,哪些是标点符号,哪些是动词,哪些是名词。
2)语法分析:就是对词法分析中得到的token流进行语法分析,这一步就是检查这些关键词组合在一起是不是符合Java语言规范。如if的后面是不是紧跟着一个布尔型判断表达式。
语法分析的结果:就是形成一个符合Java语言规定的抽象语法树,抽象语法树是一个结构化的语法表达形式,它的作用是把语言的主要词法用一个结构化的形式组织在一起。这棵语法树可以被后面按照新的规则再重新组织。
3)语义分析:语法分析完成之后也就不存在语法问题了,语义分析的主要工作就是把一些难懂的,复杂的语法转化成更简单的语法。就如难懂的文言文转化为大家都懂的百话文,或者是注释一下一些不懂的成语。
语义分析结果:就是将复杂的语法转化为简单的语法,对应到Java就是将foreach转化为for循环,还有一些注释等。最后生成一棵抽象的语法树,这棵语法树也就更接近目标语言的语法规则。
4)字节码生成:将会根据经过注释的抽象语法树生成字节码,也就是将一个数据结构转化为另外一个数据结构。就像将所有的中文词语翻译成英文单词后按照英文语法组装文英文语句。代码生成器的结果就是生成符合java虚拟机规范的字节码。
从上面的描述中我们知道编译就是将一种语言通过分析分解,再按照一定的方式先形成一个简单的框架(将Java源文件的字节流转化为对应的token流)然后在通过详细的分析按照一定的规定在这个框架里添加东西使这个token流形成更加结构化的语法树(就是将前面生成的token流中的一个个单词组装成一句话),但是这棵树离我们的目标—Java字节码还有点差距,所以再进行语义分析使那颗粗糙的树更加完整完善(给类添加默认的构造函数,检查变量在使用前有没有初始化,检查操作变量类型是否匹配),然后javac编译器调用com.sun.tools.javac.jvm.Gen类遍历这棵语法树将java方法中的代码块转换成符合JVM语法的命令形式的二进制数据。按照JVM的文件组织格式将字节码输出到以class为扩展名的文件中,也就是生成最终的java字节码。词法分析就是将关键词组织成token流即检查源码中的的关键词是否真确并组织成token流,而语法分析就是检查源码是否符合java语法规范并将词组成语句。语义分析就是简化复杂的添加缺少的,检查变量类型是否合法。代码生成器就是遍历这棵树生成符合JVM规范的代码。
Java的注释方式有哪几种?如何书写?
单行注释:用两个正斜线“//”注释掉斜线后的同行文本。
多行注释:“/”和“/”符号用于多行代码的注释。用“/”打开注释,“/”关闭注释。所有在二者之间的文本都会被注释掉。
JavaDoc注释:“/**”和“*/” 是一对特殊类型的注释符号,用于与javadoc工具一起生成包含注释的HTML文件。用于类的描述,属性的描述

什么是关键字与标识符?
每门编程语言都有一些保留的单词,用于定义该门语言,这些单词对编译器有特殊的含义,并且不能用作为标识符——这就是编程语言的关键字。
标识符是在Java代码中我们自己选用的单词。

Java中的const、goto关键字有什么作用?
为了方便将C和C++代码转换为Java代码。因为Java中不能用C和C++中会出现的这两个单词,如果要转换的C或C++代码中包含了这两个单词,那么Java编译器会产生编译错误,从而提醒程序员更改代码。

Java中有哪些保留字?
const,goto ,true、false和null

回顾标识符的命名规则,并且注意Java类名不区分大小写

标识符不能是关键字或true、false、null。
标识符可以包含字母、数字0-9、下划线(_)或美元符号(线)。
标识符是区别大小写的,并且没有规定最大长度。

Java共有多少种数据类型?哪些是基本数据类型,哪些是引用数据类型?
Java共有俩种数据类型, 基本类型和引用类型
基本类型有byte, short , int, long, float, double, char, Boolean,这八种
引用类型有,类,接口,数组,

ava基本数据类型与String引用类型的变量定义与使用。

    在Java中,变量必须声明。我们在C语言的学习中已经知道,从本质上讲,变量就是内存中的一小块区域,我们在程序中通过使用变量名来访问该区域。因此,每个变量使用前必须先声明(也就是向JVM申请内存区域),然后必须进行赋值(也就是填充这块申请了的内存空间的内容),最后才能使用该变量。
    量声明包括两个步骤:给变量一个名字,指出变量中存储的数据的类型,可以改变变量的值。在Java中,我们使用赋值运算符“=”来给变量赋一个特定的值

Java基本数据类型中的自转与强转规则(注意boolean)
自转规则
所有的byte型、short型和char型将被提升到int型;
如果其中有一个操作数是long型,那么计算结果就是long型;
如果其中有一个操作数是float型,那么计算结果就是float型;
如果其中有一个操作数是double型,那么计算结果就是double型。
强转规则
强制转换运算符由放在括号中的要强制转换的数据类型组成。f被强制转换为整型,所以int放在f前面的括号中

Java中如何定义常量?使用了哪些关键字?
Java使用关键字final,来表示某变量实际上是常量。现在,我们就可以在pi的声明前加上关键字final(中文翻译是:最终),以保证其值不会改变。
如何在Java中输入?
System.out.println(输入内容);
Java中字符串如何进行拼接?
俩个对象之间加上+号即可
类名:大驼峰命名法;
变量,方法:小驼峰命名法,
常量:所有字母大写,单词与单词之间使用下划线分隔,尽量语义详尽,
在java中双等判断是否相等,单等表示赋值,
在Java中instanceof,表示判断某一个对象是否是某一种类型的对象(”abc” instanceof string);
scanner(程序输入对象) System.out(用户把数据输出到控制台)System.in(从控制台输入)scanner.nextInt(将控制台输入的数据通过scanner.nextInt方法进行赋值)
public(访问修饰词) static(静态方法)void(访问类型)
流程控制(从上往下依次执行)改变流程控制有三种方法:
1调用方法(调用方法将导致控制流程离开当前方法,转移到被调用的方法,把在方法中所有代码执行完,才会在主方法中执行下段代码)
2选择(Java中有两种做出选择的机制:if/else语句和switch,case语句)
1if分为(单分支if语句,只有if)(双分支if语句if,else)(多分支if语句,if,elsif;elsif;elsif;)
一个if语句后可以跟上一个可选的else语句,用于在布尔表达式为false时执行
if(布尔表达式) {//当布尔表达式为true时执行}
一个else只能跟随一个相关的if。else语句不能单独出现。
2能作为switch—case中的变量值得取值范围:必须<= 4个字节,能够作为变量的类型有:char,byte,short, int(jdl1.7以后,还允许string作为变量类型)
3循环(Java中有三种循环语句:先验证再循环(for循环、while循环)、先做再验证do/while循环。(至少做一次))
跳出语句分为break语句,continue语句
break关键字可以用于任何循环控制结构,从而使循环立即终止。当执行流程遇到break语句时,不管循环计算器或者布尔表达式的值是什么,控制流程都会跳到循环后的下一条语句,直接跳出本层循坏。
continue关键字可以用在任何循环控制结构中,它将导致循环立即跳到循环的下一个迭代中。
在for循环中,continue关键字将导致控制流程立即跳到本层中下一个循环
在while循环中,控制流程立即跳到布尔表达式。
布尔运算符
&是一种计算方式,两测可以放置数值,也可以放字符,也可以放置能够得到数值的计算表达式,还可以放置布尔表达式, 表达式两边的代码都会执行
&&逻辑与两测的表达式,必须是布尔表达式, 逻辑和,又被称为“短路或", 当第一个表达式为false时, 第二个表达式将不会执行
| i++, i–, ++i, --i这种增量表达式,不参与到”其他表达式“的情况下,就是直接操作(自增,自减),如果一旦参与,++或–在变量后面的话,变量的用法是:先用,在自增自减,反之,参与计算但是++或–在变量前面的话,变量的用法是:先自增自减,再用
||一个为真就位真, i++, i–, ++i, --i这种增量表达式,不参与到”其他表达式“的情况下,就是直接操作(自增,自减)
!只能是布尔表达式
~两测可以放置数值,也可以放字符,按位非不能放布尔表达式
^一个为真一个为假, 异或运算符,两侧还是可以是数值
布尔逻辑
布尔逻辑指将两到多个布尔表达式组合为单个布尔表达式
异或。如果一个组合表达式中有一个部分为真,而另一个部分为假,那么组合表达式就为真。同时为真,或者同时为假,都是假
或。只要一个组合表达式中有一个部分为真,组合表达式就会为真。
非。对一个布尔表达式取反。
和。只有在组合表达式的每个部分都为真的时,组合表达式才会为真。

10-06 16:58