Java编程基础

作者: 彭 升军 分类: Java 发布时间: 2020-05-08 15:29

基本概念

  • 什么是软件:
    • 软件是一系列按照特定顺序组织的计算机数据和指令的集合。程序设计的最终结果是软件。
    • 系统软件: 系统软件为计算机使用提供最基本的功能.
    • 例如: DOS, Windows, Linux, Unix, Mac OS, Android, iOS
    • 应用软件: 系统软件并不针对某一特定应用领域。而应用软件则相反,不同的应用软件根据用户和所服务的领域提供不同的功能。
    • 例如: Word, Excel, PPT, QQ, FeiQ, 凌波, UltraEdit, Eclipse
    • 什么是计算机语言:
      • 计算机语言指用于人与计算机之间通讯的语言。计算机语言是人与计算机之间传递信息的媒介。
      • 为了使电子计算机进行各种工作,就需要有一套用于编写计算机程序的数字、字符和语法规划,由这些组成计算机指令就是计算机语言。
      • 软件就是由若干条计算机语言所组成的。
  • 计算机语言分类:
    • 机器语言:
    • 机器语言是直接用二进制代码指令表达的计算机语言,指令是用0和1组成的一串代码,它们有一定的位数,并分成若干段,各段的编码表示不同的含义。
    • 汇编语言:
    • 汇编语言是使用一些特殊的符号来代替机器语言的二进制码,计算机不能直接识别,需要用一种软件将汇编语言翻译成机器语言。
    • 高级语言:
    • 使用普通自然语言进行编写源代码,通过编译器将源代码翻译成计算机直接识别的机器语言,之后再由计算机执行。
    • Java开发环境搭建
    • Java平台分类
      • JavaSE(Java Platform Standard Edition)
      • Java平台标准版,包含那些构成Java语言核心的类,可以理解为学习Java的基础
      • JavaEE(Java Platform Enterprise Edition)
      • Java平台企业版,包含JavaSE,并且还包含用于开发企业级应用的类
      • 准确的说JavaEE是一套用于企业开发的技术规范,包含很多组件,13种核心技术,如:XML、JSP、Servlet、JDBC、Java Mail等。
    • JavaME(Java Platform Micro Edition)
      • Java平台微型版,包含JavaSE的一部分,另外提供一些用于小型设备上的类,例如:手机、机顶盒、汽车导航仪。
  • 下载地址
    • http://java.sun.com
    • 2009年SUN(Stanford University Network)公司被Oracle公司收购之后该地址跳转到Oracle网站。
  • JDK与JRE
    • JDK(Java Development Kit)
    • Java开发工具,包含开发Java程序的所有组件,包含JRE
    • JRE(Java Runtime Environment)
    • Java运行环境,如果要运行Java程序,就需要JRE的支持
  • 常用组件:
    • src.zip Java是一门开源的语言,其源代码都在这个压缩包中
    • rt.jar Java的基础核心类库,我们编写Java程序时使用的class都在这个jar包中
    • javac.exe 编译器,将.java源代码编译为.class文件
    • java.exe 虚拟机,运行Java程序的工具
    • jar.exe 将class文件打成jar包的工具
    • javadoc.exe 生成帮助文档的工具

常用DOS命令

  • 跳转到指定盘符: 盘符: 例:C: D: E
  • 跳转到指定目录: cd 目录 例:cd Itcast\day01 cd Tencent\QQ\Bin
  • 显示当前目录下文件: dir
  • 跳转到上级目录: cd.
  • 跳转到根目录: cd \
  • 清屏: cls

    配置JDK环境变量(在步骤查看如何配置环境变量)


    • 环境变量是指在操作系统中用来指定操作系统运行环境的一些参数
      • 1,新建变量名:JAVA_HOME,变量值:C:\Program Files\Java\jdk1.7.0--->安装路径
      • 2,打开PATH,添加变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
      • 3,新建变量名:CLASSPATH,变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
      • 备 注 :
        • 1,.表示当前路径,%JAVA_HOME%就是引用前面指定的JAVA_HOME;
        • 2,JAVA_HOME指明JDK安装路径,此路径下包括lib,bin,jre等文件夹,tomcat,eclipse等的运行都需要依靠此变量。
        • 3,PATH使得系统可以在任何路径下识别java命令。
        • 4,CLASSPATH为java加载类(class or lib)路径,只有类在classpath中,java命令才能识别。

测试JDK


  • 在CMD命令下输入java -version命令:便可查看安装信息。 
  • 注意事项
    • 1,JAVA_HOME中的路径不能用分号结尾,如C:\Program     Files\Java\jdk1.7.0。
    • 2,CATALINA_BASE,CATALINA_HOME,TOMCAT_HOME中的路径不能以“\”结尾。
    • 3,JAVA_HOME的路径一定不要写成了JRE的路径。
    • 4,在环境变量中修改添加变量时,一定要注意分号、空格,是否有多余的字母。作者就是因为path路径中多了一个字母,怎么都配置不成功。如果配置不成功,一定要反复检查。以上错误,非常容易出现错误:CATALINA_HOME或是JAVA_HOME没有配置好。如错误提示“The CATALINA_HOME environment variable is not defined correctly”


初入java:


  • java语言依赖jdk开发工具包
  • JavaME:移动(电子)设备嵌套开发
  • JavaEE:开发和部署移植的java程序
  • JavaSE:部署在桌面、服务器、嵌入式环境和实时环境中使用的
  • Java 应用程序Java程序如果要在系统中折行必须配置环境变量,告诉程序java开发工具的位置:
  • 描述jdk、jre、jvm的含义及相互关系
  • jdk是开发工具包,JDK包含JRE,而JRE包 含JVM
  • jvm就是我们常说的java虚拟机,它是整个java实现跨平台的 最核心的部分,所有的java程序会首先被编译为.class的类文件
  •   jre是指java运行环境 
  • 描述java程序的编译、运行的过程
    • java源代码-->java编译器-->java字节码-->java解释器-->CUP


java 语言的基本组成


  • 一、Java分别有五种语言组成:
    • 1、标识符
    • 2、关键字
    • 3、文字
    • 4、运算符
    • 5、分隔符ASCll码:一共256个是连续存在的, 0->48  A->65  a->97 ,B->66……-------
    • 标识符的定义:标识符就是在Java中的一些定义。
    • 如包名、变量名、常量、函数等。
    • 标识符的组成:由任意字符组成。
    • 标识符注意:以字母开头,不能保留关键字
    • 标识符由字母、数字、下划线“_”、汉字、美元符号“$”组成,第一个字 符不能是数字。 
    • 不能把java关键字保留字作为标识符。
    • 标识符没有长度限制。
    • 标识符对大小写敏感 
    • 关键字:又称保留字,是具有特殊用途的标识符,由系统使用。
    • 数据类型
      • 基本类型八个:
      • boolean,byte,char,short,int,long,float,double.
      • 字面常量:true,false, null.
      • 流程控制:if,else,switch,case,default,break,do,while,for,continue,retum.
      • 类型的占位符和字节(byte 8位  1个字节、short 16位 2个字节、int  32位  4个字节、long 64位  8个字节、float 32位  4个字节、double  64位  8个字节、char 16位  2个字节、boolean  1位)
      • byte --> short--> int --> long --> float --> double(最大) 强转顺序


自动转换和强制转换


输入:Scanner sc=new scanner(System.in)


  • 关系运算符:
    • 等于(==)
    • 不等于(!=)
    • 大于(>)
    • 小于(<)
    • 大于等下(>=)
    • 小于等于(<=)


  • 溢出:到达顶点(最大值)返回原点(最小值)重新开始计算
  • Boolean :值true,false;
  • Boolean=false;
  • java-分支结构(四种基本分支结构的认识
    • 分支结构:有条件的执行某语句,并非每句必走
    • 1)if结构:1条路
    • 2)if...else结构:2条路
    • 3)if...else if结构:多条路
    • 4)switch...case结构:多条路
      • 优点:效率高、结构清晰
      • 缺点:整数、相等
    • break:跳出switch


一、if结构的认识
/*
* 1.if结构:1条路
* 1)语法:
* if(boolean){
* 语句块
* }
* 2)执行过程:
* 判断boolean的值:
* 若为true,则执行语句块
* 若为false,则不执行语句块
*/



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
二、if...else结构

/*
* 2.if...else结构:2条路
* 1)语法:
* if(boolean){
* 语句块1
* }else{
* 语句块2
* }
* 2)执行过程:
* 判断boolean的值:
* 若为true,则执行语句块1
* 若为false,则执行语句块2
*/



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
三、if...else...if结构

/*
* 3.if...else if结构:多条路
* 1)语法:
* if(boolean-1){
* 语句块1
* }else if(boolean-2){
* 语句块2
* }else if(boolean-3){
* 语句块3
* }else{
* 语句块4
* }
* 2)执行过程:
* 判断boolean-1,若为true则执行语句块1,若为false则
* 再判断boolean-2,若为true则执行语句块2,若为false则
* 再判断boolean-3,若为true则执行语句块3,若为false则执行语句块4
* 3)说明:
* 3.1)块1234,只有可能走其中之一
* 3.2)若没有最后的else,则块123并非必走其中之一
* 3.3)若有最后的else,则块1234必走其中之一
*/



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
四、switch...case结构

例:
&#91;cc lang="Java"]
int num = 2;
switch(num){
case 1: //if(num==1)
System.out.println(111);
break;
case 2: //以此为入口
System.out.println(222);
break; //跳出switch
case 3:
System.out.println(333);
break;
default:
System.out.println(666);
}
&#91;/cc]


逻辑运算符


与或非(!,&&,||)



  • 加号:在操作数字、字符、字符串时是不同的,两个字符相加得到的是码表值,两个字符串相加是将字符串连接在一起。
  • 除号:整数在使用除号操作时,得到的结果仍为整数(小数部分忽略)。
  • 取模:模数(%右边的数)的符号忽略不计,结果的正负取决于被模数(%左边的数)。
  • 自增:符号在前就是先运算后取值,符号在后则是先取值后运算。
  • 数组:
    • 数组使用一个这[]表示一维数组,使用[][]表示二维数组,定义数组后应该从堆中赋予它存储空间,用new,如 int[] i=new int[3],3是容量或是常量;int[] i={1,2,3},取出数组中的第几个数用下标值(索引)i[0]=1;注意:下标值从零开始(个数减一)


  • 堆和栈:
    • 堆:是静态存储空间
    • 栈:是动态存储空间
  • 什么是方法?方法的作用?



  • 函数(方法)
    • 函数的定义
    • 函数就是一段有名字的代码,可以完成某一特定功能。
    • 如果有一段代码要使用多次,我们可以给它起个名字,每次使用时通过名字调用,这样就不用每次都写一大段代码了。
    • 如果某个函数在执行的时候需要调用者传入数据,那么可以定义参数列表,用于接收数据。如果函数运行之后需要返回给调用者数据,那么需要指定返回值类型,并且用关键字return返回。定义函数的3个必要条件:返回值类型、函数名、参数列表。如果不需要参数也要写小括号,如果没有返回值类型要写void。
  • 名词解释
    • 形参:在定义函数时小括号中的参数,用来接收数据的参数。
    • 实参:在调用函数时真正传入的参数,传递给函数的数据。
    • 参数类型:函数的参数的类型,一旦定义传入时必须匹配。
    • 返回值:函数运行结束后返回的值,使用return关键字返回。返回值类型:函数运行结束后返回的值的类型,在类型非void情况下必须返回,而且必须类型匹配。
  • 函数的重载
    • 多个函数的函数名相同,参数列表不同(个数、顺序、类型),这就是函数的重载。在调用函数的时候通过传入的实参找到匹配的函数调用。
    • 函数的重载和返回值类型无关。


面向对象


  • 面向对象概念
    • 特点:封装、继承、多态、抽象
  • 什么是面向对象
    • 面向对象(Object Oriented)是一种思想,90年代以后软件开发的主流思想。
    • 由于现实社会是由各种各样的事物所组成的,而我们编程又是在模拟现实社会,那么在程序也要用一些东西来表示现实社会中的事物,这些东西就是程序中的对象。我们在程序中使用这些对象,对其特征和行为进行操作进行编程,这就是面向对象编程。
    •  万物皆是对象,万物皆可Object
    • 在使用面向对象编程思想之前,我们通常用面向过程的思想编程,先分析出解决问题的步骤,然后按照步骤一步一步实现。
  • 面向对象编程的优点
    • 提高代码复用性。
    • 使用者无需关心具体细节。
    • 转变程序员角色,更加符合人的思维习惯。
    • 面向对象的特点:封装、继承、多态、抽象
  • 什么是封装
    • 将一类事物的特征和行为定义在一起,可以通过这个定义创建对象,使用对象进行编程
    • 封装时需要将对象的属性和一些实现细节隐藏,仅对外提供必须的访问方式。例如get(),set()方法。
  • 怎么封装
    • 将所有属性隐藏,提供公有方法对其访问。
    • 将不需要对外提供的方法隐藏。
  • 封装的优点
    • 提高安全性:在访问对象的属性时候通过方法实现,在方法中可以进行校验。隐藏不必要提供的方法避免错误的调用。
    • 简化编程:使用者无需关心对象内部具体实现细节,只要根据对象功能调用指定方法。
  • 什么是继承
    • 在程序中,可以使用extends关键字让一个类继承另外一个类。
    • 继承的类为子类(派生类),被继承的类为父类(超类, 基类)。
    • 子类会自动继承父类所有的方法和属性。
  • 为什么要使用继承
    • 当我们发现一个类的功能不行,方法不够用时,就可以派生子类,增加方法。
    • 当我们需要定义一个能实现某项特殊功能的类时,就可以使用继承。
    • 最终还是为了一个目的,提高代码的复用性。
    • 当我们定义一个类时,发现另一个类的功能这个类都需要,而这个类又要增加一些新功能时,就可以使用extends关键字继承那个类,这样那个被继承类的功能就都有了,不必重写编写代码。这时只要在新的类中编写新的功能即可,原有代码就被复用了。
  • 继承的特点
    • Java只支持单继承,不支持多继承,但是可以多重继承
    • 例如:A extends B ; B extends C;
    • 为什么不支持多继承:因为如果一个类继承多个类,多个类中有相同的方法,子类调用该方法时就不知道该调用哪一个类中的方法了。
  • 什么是多态
    • 多态字面上的意思就是多种形态。
    • 在面向对象语言中,我们可以将函数的形参定义为一个父类类型,而在真正调用该函数时这个父类类型的所有子类对象都可以传入,根据传入的子类对象不同函数可以运行处多种形态。
    • 多态的特点
      • 应用程序不必为每一个子类编写功能调用,只需要对父类进行处理即可。这一招叫“以不变应万变”,可以大大提高程序的可复用性。
      • 子类的功能可以被父类的变量调用,这叫 向后兼容,可以提高程序的可扩充性和可维护性。现在写的程序可以调用将来写的程序不足为奇。
  • 什么是抽象类
    • 使用abstract关键字修饰的类就是抽象类,抽象类不能new对象。
    • 没有方法体的方法为抽象方法,使用abstract关键字修饰。
    • 有抽象方法的类必须声明为抽象类。
    • 抽象类不一定含有抽象方法。
  • 为什么要定义抽象类
    • 如果有多个类具有相同的方法声明,而方法的实现不一样,这时就可以抽象出父类,将方法在父类中声明
    • 别人在学习我们的软件时,只需要学习父类就知道子类有什么方法
    • 在设计软件时,要尽力抽象父类,继承关系以3~4层为宜
  • 构造方法
    • 什么是构造函数
      • 构造函数是一个特殊的函数。
      • 函数名和类名相同。
      • 没有返回值类型。
      • 注意:没有返回值类型不等同于void。在使用new关键字创建对象之后自动调用。
  • 构造函数的重载
    • 构造函数的重载和普通函数相同,函数名相同,参数列表不同即可。
  • 构造函数的调用
    • 构造函数在new关键字创建对象时调用。
    • 构造函数可以在该类其他构造函数的第一个语句使用this(调用这个对象,可以在构造方法内外使用)关键字调用。//一个类可以有多个构造方法
  • 所有类都有构造函数
    • 每一个类都有构造函数,即使我们没有显式定义构造函数,也会生成一个默认无参的构造函数,其中没有任何内容。
    • 注意:这个自动生成的构造函数只在未定义任何构造函数时生成,如果我们定义了一个有参的构造函数,那么就不会生成无参的了。
  • 构造函数的访问权限
    • 在定义构造函数时,如无特殊需要,应使用public关键字修饰构造函数。
    • 在一些特定情况下,我们不想让别人创建该类对象,那么可以使用private修饰构造函数,例如单态设计模式。
    • 重载:同一个类中相同的方法名,不同的参数,在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
    • 重写:在子类中与父类的 方法名,参数列表,均相同,内容不相同


包(package)


  • Java中常用的包
    • java.lang
      • 包含一些Java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能。
    • java.awt
      • 包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。
    • java.net
      • 包含执行与网络相关的操作的类。
    • java.io
      • 包含能提供多种输入/输出功能的类。
    • java.util
      • 包含一些实用工具类,如定义系统特性、使用与日期日历相关的函数。
    • 定义带包类
      • 使用package语句加上包名来定义类所属于的包,包名全部小写
    • package语句为Java源文件的第一条语句
      • 如果一个类中没有使用package语句,这个类为缺省无包名
    • 一个类如果想被其他包中的类引用,必须使用public关键字修饰。构造函数也需要public
      • 如果一个类被声明为public,那么必须和文件名同名
    • 使用带包的类
      • 在使用带包的类时需要使用全限定名(包名.类名)
      • 在每次写类名时都使用全限定名很麻烦,我们可以使用import导入包,之后再使用就无需写包名了
      • 星号*:导入一个包中所有类。优先匹配当前包中的类,如果当前包没有再匹配导入包中的类。
      • 具体类名:导入指定一个类。无论当前包中是否有同名类,都直接匹配导入的类。
    • 无包的类可以使用有包的类,有包的类不能使用无包的类。
    • 编译运行带包的类
    • 编译一个带包的源文件,在生成class文件的同时需要生成包文件
      • 编译命令:javac –d <目录> 源文件名.java
    • 运行有包的类时需要加上包名
      • 运行命令:java 包名.类名  


jar文件


  • 什么是jar文件
    • jar文件是Java文件的一种压缩格式
    • 一般来讲,我们会将一个软件系统的所有class文件打成一个jar文件以供别人使用
    • 当我们用到jar包中的类时,需要将jar文件的绝对路径加到classpath当中
  • 如何压缩jar文件
    • 将编译好的带包的class文件压缩成一个jar文件称为打jar
    • 打jar命令:jar cvf jar包名.jar 要打包的文件/文件夹
    • 运行jar文件命令: java -jar jar文件名.jar



访问控制符


  • 类的访问控制符有两种:
    • public关键字修饰:可以被所有的类访问
    • 缺省为default(可叫friendly):只能被同一包中的类访问

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

标签云