JAVA基础

一、关于Java发展史

1.JAVA的语言设计始于1991年,SUN公司最开始想在消费类电子产品方面寻求市场,成立了由James Gosling领导的Green开发小组首要目标是编写可内嵌于家用小型电器设备内部的软件 ,使得机器变得更加的人工智能。

2.开始的时候Green小组是用C++编写的,后来发现C++并不适合这类任务。为什么呢?因为C++编写的程序常常会有使系统失效的程序错误,由其是内存管理和指针操作,常产生很多bug,大家设想 一下啊,比如说一台烤面包机上的程序有错误,可能会使面包机烧毁,甚至 更严重会产生爆炸。

3.所以后期呢,为了解决这个问题,Green小组 决定自己开发一种新的语言,该语言的设计目标是具有平台 的独立 性、高度的可靠性和安全性。因为那个时候C以及C++已经得到了广泛的应用,所以他们决定 以C++为基础来开发该语言。该语言最初被取名为Oak(橡树)。 Java的取名也有一些趣闻, 有一天, 几位Java成员组的 会员正在讨论给这个新的语言取什么名字,当时他们正在咖啡馆喝着Java(爪哇)咖啡,有一 个人灵机一动说就叫Java怎样, 得到了其他人的赞赏, 于是更名为JAVA(咖啡),一会呢,我们安装JDK的时候大家能看见我们JDK的图标呢就是一杯咖啡。

4.后期呢,在这个家电方面确实取得了一些成就,但是由于各种原因,还是没有推上市场。直到1994年,借着Internet和WWW的飞速发展,SUN公司呢,发现JAVA具有平台的独立性、高度的可靠和安全性非常适合在Internet的WWW上做应用开发。经过改造呢,终于JAVA在1995年5月23号正式宣布诞生了。

二、JAVA的特性和优势

简单性:就是c++语法的纯净版。没有头文件,指针运算,结构,联合,操作符重载,虚基类等等。由于语法基于c,因此学习起来完全不费力。

面向对象:面向对象是一种程序设计技术,他将重点放在数据(即对象)和对象之间的接口上。

可移植性:这是JAVA的一个重要的优势。JAVA代码或者说字节码、二进制码可以跨平台的移植,而不用管具体的操作系统和硬件环境。JAVA本身就是面向网络的,只有在网络环境中才能显示出他的优势,比如:现在我有一个网络环境,要让我的笔记本和手机交互,笔记本环境是windows发出一个让手机定时录音的JAVA代码,手机只有简单Linux内核操作系统,照样可以完美的执行这个代码。“一次编写,随处运行”:“write once, run anywhere”JAVA在设计时就很注重移植和跨平台性。比如:JAVA的Int永远都是32位。不像c++可能是16,32,可能是根据编译器厂商规定的变化。这样的话程序的移植就会非常麻烦。

高性能:J2EE是J2SE的扩展,增加了用于服务器开发的类库。如:javax.servletEnterprise JavaBeans 是一种用来代表企业逻辑的软件组件;JDBC则是让程序人员能直接在Java内使用的SQL的语法来访问数据库内的数据;Servlet能够延伸服务器的功能,通过请求-响应的模式来处理客户端的请求;JSP是一种可以将Java程序代码内嵌在网页内的技术;另外还有包括XML、email及transaction等各种应用于服务器端的API。这个版本是Java平台的核心,它提供了非常丰富的API来开发一般个人计算机上的应用程序,包括用户接口AWT及Swing,网络功能与国际化、图像处理能力以及输入输出支持等。在互联网上大放异彩的Applet也属于这个版本。J2ME是J2SE的内伸,包含J2SE的一部分核心类,也有自己的扩展类,增加了适合微小装置的类库:javax.microedition.io.*等。JIT(JUST IN TIME)即时编译。将一些“热点”字节码编译成本地机器码,并将结果缓存起来,在需要的时候重新调用。这样的话,使JAVA程序的执行效率大大提高,某些代码甚至接待c++的效率。随着这种技术的一天天完善,也许有一天会超越编译代码的效率。

动态性:就是在需要时将某些代码添加到正在运行的程序中。反射机制。当需要把某些代码添加到正在运行的程序中时,动态性是一个非常重要的特性。Java的动态特性是其面向对象设计方法的扩展。它允许程序动态地装入运行过程中所需要的类,这是C++语言进行面向对象程序设计所无法实现的

多线程:多线程的使用可以带来更好的交互响应和实时行为。多线程的简单性是Java成为主流服务器端开发语言的主要原因之一。

安全性Java适合于网络/分布式环境,为了达到这个目标,在安全性方面投入了很大的精力,使Java可以构建防病毒,防篡改的系统。

健壮性:Java是一种健壮的语言,吸收了C/C++ 语言的优点,但去掉了其影响程序健壮性的部分(如:指针、内存的申请与释放等)。Java程序不可能造成计算机崩溃。Java系统仔细检测对内存的每次访问,确认它是合法的,而且不致引起任何问题。不过,即使Java程序也可能有错误。如果出现某种出乎意料之事,程序也不会崩溃,而是把该例外抛弃。再通过异常处理机制,程序就会发现这类例外,并加以处理。

三、Java重点版本的新特性

        jdk1.2新特性:可变参数、面向对象特性、特殊类型String、static静态声明静态代码块、构造方法私有化。

        jdk1.5新特性:泛型,for-each循环,自动装包/拆包,枚举,可变参数,静态导入,注解。

        jdk1.7新特性:二进制字面量,数字字面量可以出现下划线,switch 语句可以用字符串,泛型简化(即泛型推断),异常的多个catch合并,try-with-resources 语句。

        jdk.8新特性:接口的默认方法与静态方法,也就是接口中可以有实现方法、Lambda 表达式、函数式接口与静态导入、Lambda 作用域 在lambda表达式中访问外层作用域和老版本的匿名对象中的方式很相...、访问局部变量,等等其他新特性。

 四、环境变量的配置
        path:
            目的: 为了能够在任意路径下使用javac,java命令
            步骤: 系统右键->属性->高级系统设置->环境变量->系统变量->path->把jdk的bin目录配置进去
        JAVA_HOME : 
            目的: 
                为了不频繁的修改path的值,可以配置JAVA_HOME来优化配置
                未来使用某些框架等资源的时候有可能会需要查找JAVA_HOME的路径
            步骤: JAVA_HOME -> jdk的安装路径D:\install_path\Java\jdk-11.0.7 
                  path ->     %JAVA_HOME%\bin 引用JAVA_HOME变量的值
        classpath:  指定class文件的路径 
五、注释

        注释: 解释说明的文字

        作用:

                1.对程序的解释说明

                2.便于后期维护

        注释的分类:单行注释、多行注释、文档注释。

        多行注释与文档注释的区别:

                1.颜色

                2.文档注释能够存在API文档中,但是多行注释不可以

                API文档: 类的说明书

                通过javadoc Class002_Comment.java为java文件中类声明API文档

3.工具中,在方法的上面添加文档注释会自动匹配一些方法的说明

注意:注释的内容不会被编译;类中适当的位置一定要添加注释

六、标识符

        标识符: 一切起名字 的地方的名字就是标识符

        标识符的命名规则 :

                1.组成: 数字,字母,下划线_,美元符号$任意组合而成,数字不能开头 abc123

                2.严格区分大小写

                3.关键字与保留字不能作为标识符使用

        关键字 : java中有一些单词,java语法赋予了特殊的作用与用法,这些单词成为关键字

        保留字 : java中有一些单词,java的语法现在还没有使用,将来有可能使用的单词成为保留字         const goto

        关键字全小写,工具中特殊的颜色显示

        标识符的命名规范 :

                1.见名知意

                2.驼峰命名原则

                        包名 : 文件夹 全部小写

                        单级包 : 一个文件夹 shanghai

                        多级包 : 多个文件夹嵌套,层级之间使用.进行分隔 shang.hai

                        类名|接口名 : 每个单词首字母大写 ShangHai

                        方法名|变量名 : 第一个单词全部小写,第二个单词开始每个单词的首字母大写                         shangHai

                        常量名 : 所有单词全部大写,多个单词之间_连接 SHANG_HAI

七、常量

        常量 :java程序执行过程中,其值不会发生改变的量

        分类:

        字面值常量 :

        整数常量 : -1 100 51 0 100

        小数常量 : 1.1 -1.5

        字符常量 : 'a' '1' ',' ' '

        字符串常量 : "" "abc" "HelloWorld" " "

        布尔常量 : true false

        自定义常量 :

        被final修饰的变量为常量

八、变量

        变量 : 存储单个数据,可变的量;执行过程中,其值可能会发生改变的量;内存中开辟一块空间,用来存放指定类型的数据;变量相当于造盒子|开辟空间;空间|盒子就是变量;盒子的名字叫做变量名;盒子中|空间中存放的数据叫做变量的值;盒子|空间的大小->由数据的类型决定。

        定义变量的语法:

                数据类型 变量名 = 赋值; --> 声明的同时赋值

                数据类型 变量名; -->变量声明

                变量名 = 赋值; -->变量赋值

                数据类型 : 整数int 小数double 字符char 布尔boolean 字符串String

                注意: =是java中唯一一个自右向左运算的符号

                一行内同时声明或者创建多个变量

        变量关注的点:

                1.数据类型 : 存储的数据决定

                2.变量的名字 : 标识符的命名规则|规范

                3.变量的值 : 要与数据类型保持一致

                4.作用域 : 能够使用的范围

                {} -> 代表作用域

                从变量的声明开始,到包裹这个变量的,离它最近的}结束

                注意:变量必须在作用域范围之内才能使用

                同一个作用域中,变量不能同名

                统一时刻变量只能存储一个值,变量的值不能回复

        变量的分类:

                1.局部变量 : 在方法中或者语句块中定义的变量成为局部变量

                使用前必须已经声明并且已经赋值

                2.成员变量 : 在类中方法外定义的变量成为成员变量

                                只声明不赋值存在默认值

                                整数:0 小数:0.0 字符:' ' 布尔: false 字符串: null

九、数据类型

        数据类型:存储数据的空间大小

                        计算机中最基本的存储的单位: 1字节 = 1byte

                        1 byte = 8 bit

        基本数据类型 : 4类八种

        整型

表示名称表现形式大小范围
字节型byte1个字节8bit [-128,127]
短整型short2个字节16bit [-32768,32767] 正负三万
整型 int 4个字节32bit 正负21亿
长整型 long8个字节64bit 非常大

                        整数字面常量值默认的数据类型为int类型

                        表示一个比int类型更大的数值的时候,在数据的后面添加一个L|l-->推荐使用L

                        在java中,如果给byte,short,char赋值的时候,在其范围内的常量能够直接赋值

        浮点型

                单精度 float 4个字节32bit 精确表示6~7位

                双精度 double 8个字节64bit 精确表示16~17位

                java中浮点类型的字面常量值默认是double类型

                在java中 表示一个float类型的数据在数据的后面添加f|F

                浮点类型的数据运算可能会造成数据的不精确

                java中的浮点型数据存储标准: 二进制浮点型运算标准

        字符型

                char 字符型 2个字节

                char类型数据的表现形式:一对''包裹一个字符 ' ' '1' '中'

                十进制的整数表示某一个字符 0~65535 -->Unicode

        布尔型

                boolean 真(对)->true | 假(错)->false 1bit

                引用数据类型 : 类 接口 数组[]

十、 转义字符
        当java中有些字符,java语法赋予了特殊的含义,如果不想要这些字符代表特殊含义,想要表示其字符本身,可以使用转义字符进行转义
        转义字符从\开始 
        \t : 制表符
            一个制表符位置代表8个空格
            cmd中一个英文占据1个空格,一个汉字占据2个空格
            制表符位置 前面的内容如果满制表符位的整数倍,重新开辟一个制表符位,如果不满,补全一整个制表符位置
        \n 换行
            光标从这一行的行尾换到下一行的行首
        \b 退格
            光标回到上一格
            如果\b后面没有内容的输出,对原数据不影响,如果\b后面存在内容的输出,会覆盖原有位置的内容

数值型表现形式:
        整型 : 
            进制: 满几进一
            二进制 : 由0,1组成           通过0b|0B开头
            八进制 : 由0~7之间的数字组合而成    通过0开头
            十进制 : 默认  由0~9之间的数字组合而成
            十六进制 : 由0~9,a~f组合而成        通过0x|0X开头
        转换:
            其他进制转为十进制: 从后往前,从右往左,最后一位开始,当前这一个位置的数值*当前进制数^0开始,每次+1,最后的和为转为十进制的数据
            十进制转为其他进制: 当前的十进制数据不停的除以2,每次关注余数,当结果为0不除了,余数从下往上看   
        浮点型:
            1.当小数的整数位为0的时候,0.5-->0省略 : .5
            2.科学计数法 e|E->10
                1.23E3 - > 1.23*10^3

十一、数据类型转换
        正常: 对应类型的数据赋值给对应类型的变量
        boolean类型不参与类型转换
        自动类型提升:
            从小到大
            大范围类型 变量名 = 小范围类型的数据;
        强制类型转换
            从大到小,有可能会损失精度
            小范围类型 变量名 = (小范围类型)大范围类型的数据;
                强转是发生在赋值之前的,大范围类型的数据强转为小范围类型,然后赋值给对应的小范围类型的变量    
        注意: 
            1.当多种类型参与运算时候,结果为参与运算中最大的数据类型
            2.当多种类型参与运算时候,如果参数运算的最大类型小于int类型,结果提升成为int类型
            3. byte->short->int->long->float->double
            4.当byte,short,char赋值的时候,只要在其范围内的常量就能够成功赋值
十二、运算符 
        功能作用的不同分类:算数运算符、 赋值运算符、比较运算符|关系运算符、  逻辑运算符、条件运算符、位运算符 (了解)。
        操作数: 运算符左右两边的数据成为操作数  3+4
        表达式: 运算符连接左右两边的操作数整体称为表达式
        语句 : 以 ; 结束
        操作数的不同 一元运算符: 操作数为1个   ++ --  +(正号) -(负号)
            双目运算符|二元运算符: 操作数为2个   a+b  -  * /
            三目运算符|三元运算符: 条件运算符
    算数运算符:、
        + 
            1)正号
            2)加法运算
            3)字符串的连接符
                当+左右两边一旦出现字符串,+作为字符串的连接符使用,最后会把左右两边的数据拼接成一整个字符串得到结果
        % 模以 取模  求余数
            操作1%操作数2  当操作数1<操作数2时候,结果为操作数1               
    注意:
        一个字符型数据参与运算(四则运算),会前转为十进制的整数再运算--> Unicode,ASCII  

        ++ --  一元运算符
            ++ 自增    自身+1
            -- 自减    自身-1
            只影响操作数本身
               ++放在操作数的前面或者后面,都是自身+1
                --放在操作数的前面或者后面,都是自身-1    
            影响其他值(赋值,输出,表达式计算)
                ++|--放在操作数的前面,先+1|-1,然后再去运算
                ++|--放在操作数的后面,先参与运算,然后再自身+1|-1     

        赋值运算符
                基础赋值运算符  = 
                    =是java中唯一一个自右向左运算的符号    
                扩展赋值运算符 (算数运算符+基础赋值运算符)
                    +=    a+=b  ==> a = a+b
                    %=    a%=b  ==> a = a%b;        
               缺点:
                    不直观
                优点:
                    提高执行效率,编译期会自动优化为扩展赋值运算符
                    自动做强制类型转换

        比较运算符|关系运算符
                > < >= <=  
                    只能针对数值型|能够转为数值型的数据进行操作
               ==  !=
                    可以针对任意类型数据进行操作        
                    结果为boolean类型的运算符

        逻辑运算符:
        & 与    
            一个为false就是false,两个都为true,结果才为true
        | 或
            一个为true就是true,两个都为false才是false
        ! 非 取反
            !true->false
            !false->true
        ^ 异或
            相同为false,不同为true            
        短路运算符 : 当左边的操作数的值就能够决定最终的结果,右边操作数将不会执行       
            短路与 : 与单与逻辑相同
            短路或 : 与单或的逻辑相同            
        推荐使用短路运算符
        两边的操作数为boolean类型
        结果为boolean类型结果

        条件运算符        
                boolean表达式 ?值1 : 值2;        
                boolean表达式  : 值为boolean类型的表达式
                        1)计算表达式,得到一个boolean结果
                        2)如果结果为true,条件运算符结果为值1
                        3)如果结果为false,条件运算符结果为值2

        位运算符:(了解)
                把操作数转为二进制,对二进制的操作数进行某种规则的运算,最终得到的二进制的结果再转为十进制        
        一下三个 运算符,当操作数为boolean类型作为逻辑运算符,操作数为整数,作为位运算符
        & : 两边的操作数转为二进制,同一位置的两个数,一个为0就是0,两个都为1才1,结果转为十进制
        | : 两边的操作数转为二进制,同一位置的两个数, 一个为1就是1,两个都为0才是0,结果转为十进制
        ^ : 两边的操作数转为二进制,同一位置的两个数, 相同为0,不同为1,结果转为十进制        
        位移运算符
            << 左移  : 第一个操作数转为二进制,向左移动第二个操作数个位置,空位补0,结果转为十进制
            >> 右移  : 第一个操作数转为二进制,向右移动第二个操作数个位置,移出的位置舍弃,结果转为十进制            
            规律: 
                左移: 相当于*2的倍数    a<<b ==> a*2^b
                右移: 相当于/2的倍数    a>>b ==> a/2^b       
        位运算符的执行效率较高,因为针对二进制的数据
        当想要对2或者2的倍数进行乘除,建议使用位移运算符效率更高

十三、两个常用工具类

        基本数据类型:基本数据类型 变量名 = 赋值;  如: int i = 1;
    引用数据类型:
        1.导包 : 指明当前引用数据类型类的位置
            import 包名.类名;
            位置: 类的上面
        2.创建当前引用数据类型的一个变量|引用
            引用数据类型 变量名  = new 引用数据类型();
        3.根据引用使用功能
            引用名.功能名字(); 
    Scanner 接收用户键盘输入的内容
        1.导包
            import java.util.Scanner;
        2.创建Scanner类型的一个变量|引用
            Scanner sc  = new Scanner(System.in);
        3.使用功能
            sc.功能名字();
                   如: sc.nextInt(); 接收用户键盘输入的int类型的数据
                            sc.nextByte(); 接收用户键盘输入的Byte类型的数据
            字符串
            sc.next(); 接收用户输入的字符串
                从有效字符开始接收(非空格),知道遇到enter才能结束功能,但是接收过程中如果遇到空格,就停止接收,但是功能不会结束
            sc.nextLine(); 接收用户输入的一整行字符串
                从任意字符开始接收,如果接收的内容为enter结束功能
                如果nextLine功能的上面有使用到系列next功能,需要处理遗留enter问题sc.nextLine();
        4.关闭
            sc.close();
            使用当前类中完全使用完毕之后进行关闭,以便于回收资源

        Random : 产生随机数
        nextInt() 产生int范围内随机整数
        nextInt(整数n) 产生int类型的[0,n)整数
        nextDouble() 产生一个double类型 的随机小数-->[0.0,1.0)
    总结公式:
        产生某一个范围内的随机 整数
        [0,max]   ran.nextInt(max+1)
        [min,max]    
            ran.nextInt(max-min+1)+min    -->[0,max-min] +min --> [min,max]
        [min,max)
            ran.nextInt(max-min)+min  -->[0,max-min)+min-->[min,max)
    伪随机数: 没有真实达到完全随机

十四、流程控制语句
        顺序结构 : 从上到下,从左到右-->默认
        选择结构 : 满足条件执行对应的代码
        循环结构 : 让一些代码重复不停的执行多次  
    选择结构:
        if 区间判断|定值判断
        switch 定值判断
        能用switch的都能if,能用if不一定能够使用switch
    if  
        单选泽|单分支\
            if(条件表达式){
                满足条件执行的代码段;
            }
            条件表达式  : 必须为一个值为boolean的表达式
            执行流程:
                1.计算条件表达式
                2.如果结果为true,执行{}中的语句体
                3.如果结果为false,就直接跳过if结构
        双选择|双分支
            if(条件表达式){
                满足条件执行的代码段;
            }else{
                不满足条件执行的代码段;
            }
            注意: 双选择一定能够执行语句体|一定能够得到结果
        多选择|多分支
            if(条件表达式1){
                满足条件表达式1执行的语句体1;
            }else if(条件表达式2){
                满足条件表达式2执行的语句体2;
            }else if(条件表达式3){
                满足条件表达式3执行的语句体3;
            }.....
            else{ -->接盘侠
                如果以上都不满足执行得到语句体n;
            }
        注意: 当{}中的语句体只有一句,前后的{}可以省略

        if 与 条件运算符之间的区别:i
                能够使用条件运算符的都可以使用if语句
                if是一个语法结构,条件运算符是运算符
                条件运算符编写更简洁,性能更高,结构简单,但是if更强大
                条件运算符必须得到一个结果的,但是if语句可以没有结果(单选择)
                if语句可以根据不同 的选择判断,决定执行对应的语句体结构,而条件运算符只能存在一个条件
                建议: 如果结构简单,能够使用条件运算符就使用条件运算符,否则就使用if语句

        for循环
                for(条件初始化;条件判断;条件变化 ){
                    重复执行的语句体;
                }
                条件初始化 : 声明一个变量i并且第一次赋值  -->i条件
               条件判断 : 对变量的i判断
               决定循环是否结束
                条件变化|迭代因子 : 变量i自身值的改变    
        执行顺序:
                    1.条件初始化 i
                    2.条件判断,满足执行语句体,不满足条件,结束循环
                    3.条件变化
                   从第二次循环开始,重复执行2,3步骤
            注意:
                for循环的变量条件i只属于当前 for循环,只能在循环中使用
                for可以通过条件的变化控制循环的次数,循环体中可以使用条件的值,条件变量可以按照想要的逻辑进行变化,实现需求
                考虑: 是否存在一些代码重复执行,如果是,规律可循,可以选择使用循环结构
                如果循环体语句只有一句,前后的{}可以省略

        switch 定值判断
            能用if的不一定能用switch,能用switch都能使用if
            switch(表达式){
                case 值1:
                   语句体1;
                    break;
                case 值2:
                    语句体2;
                    break;
                        ....
                 default:
                    语句体n;
                    break;
           }
         表达式 :  一般为一个变量,可以为一个表达式,常量都可以
        结果数据类型要求: byte,short,int,char,枚举类型(jdk5),String字符串(jdk7)
    case : 后面接一个定值,拿到表达式的结果与case后面的定值进行判断是否相等,相等执行对应的语句体,不相等,继续向下判断
        从上到下一次判断
    break : 终止当前的switch语句
            如果没有break会发生case穿透 : 从当前满足条件的语句体开始执行,一直向下 穿透,无论下面的case是否满足条件都不再判断,直接执行语句体,
                直到遇到下一个break或者switch语句的结束而结束
    default : 与else相同
        以上的case都不满足,name就执行default中的内容
        位置可以在switch语句中的任意位置
        一般定义在switch语句的最后,如果切换位置,注意break定义
    一对{}中的内容就要缩进一个tab键

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值