zoukankan      html  css  js  c++  java
  • java基础知识回顾-笔记(微学苑)

    java程序编译的结果不是生成机器码,而是生成字节码,字节码不能直接运行,必须通过JVM翻译成机器码才能运行。不同平台下编译生成的字节码是一样的,但是由JVM翻译成的机器码却不一样

    跨平台的是Java程序,不是JVM。JVM是用C/C++开发的,是编译后的机器码,不能跨平台,不同平台下需要安装不同版本的JVM

    就业方向:

    Web开发

    Web开发语言很多,Java是其中之一。Java在开发高访问、高并发、集群化的大型网站方面有很大的优势,例如人人网、去哪儿网、美团等。

    JDK所提供的部分工具:

    • java编译器:javac.exe
    • java解释器:java.exe
    • java文档生成器:javadoc.exe
    • java调试器:jdb.exe

    环境变量的设置

      • JAVA_HOME:设为JDK的安装路径
      • Path:使得系统可以在任何路径下识别java命令
      • CLASSPATH:Java运行环境加载类的路径,只有类在classpath中,才能被识别和加载

    Java 中的主运行方法,它和 C/C++中的main()作用是一样的,就是所有的程序都从“main()”中开始执行。要执行 Java 程序,必须有一个包括主运行方法的类。

    java中常用的几个包介绍:

    包名说明
    java.lang 该包提供了Java编程的基础类,例如 Object、Math、String、StringBuffer、System、Thread等,不使用该包就很难编写Java代码了。
    java.util 该包提供了包含集合框架、遗留的集合类、事件模型、日期和时间实施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。
    java.io 该包通过文件系统、数据流和序列化提供系统的输入与输出。
    java.net 该包提供实现网络应用与开发的类。
    java.sql 该包提供了使用Java语言访问并处理存储在数据源(通常是一个关系型数据库)中的数据API。
    java.awt 这两个包提供了GUI设计与开发的类。java.awt包提供了创建界面和绘制图形图像的所有类,而javax.swing包提供了一组“轻量级”的组件,尽量让这些组件在所有平台上的工作方式相同。
    javax.swing
    java.text 提供了与自然语言无关的方式来处理文本、日期、数字和消息的类和接口。

     注意:

    • import 只能导入包所包含的类,而不能导入包。
    • 为方便起见,我们一般不导入单独的类,而是导入包下所有的类,例如 import java.util.*;

    Java 编译器默认为所有的 Java 程序导入了 JDK 的 java.lang 包中所有的类(import java.lang.*;)

    System 类位于 java.lang 包

    Java中共有8种基本数据类型,包括4 种整型、2 种浮点型、1 种字符型、1 种布尔型,请见下表。

    Java基本数据类型
    数据类型说明所占内存举例备注
    byte 字节型 1 byte 3, 127  
    short 短整型 2 bytes 3, 32767  
    int 整型 4 bytes 3, 21474836  
    long 长整型 8 bytes 3L, 92233720368L long最后要有一个L字母(大小写无所谓)。
    float 单精度浮点型 4 bytes 1.2F, 223.56F float最后要有一个F字母(大小写无所谓)。
    double 双精度浮点型 8 bytes 1.2, 1.2D, 223.56, 223.56D double最后最好有一个D字母(大小写无所谓)。
    char 字符型 2 bytes 'a', ‘A’ 字符型数据只能是一个字符,由单引号包围。
    boolean 布尔型 1 bit true, false  

     不像 C/C++,Java 不支持无符号类型(unsigned)

    float 类型有效数字最长为 7 位,有效数字长度包括了整数部分和小数部分

    注意:每个float类型后面都有一个标志“F”或“f”,有这个标志就代表是float类型

    double 类型有效数字最长为 15 位。与 float 类型一样,double 后面也带有标志“D”或“d”

    注意:不带任何标志的浮点型数据系统默认是 double 类型。

    C语言没有布尔型 :

    在C语言中,如果判断条件成立,会返回1,否则返回0

    但是在Java中不一样,条件成立返回 true,否则返回 false,即布尔类型

    自动数据类型转换

    操作数1类型操作数2类型转换后的类型
    byte、short、char int int
    byte、short、char、int long long
    byte、short、char、int、long float float
    byte、short、char、int、long、float double double

    Java中没有像C语言中的scanf()语句,从控制台获取输入有点麻烦,使用 Scanner 类

    与C、C++不同,Java在定义数组时并不为数组元素分配内存,因此[ ]中无需指定数组元素的个数,即数组长度。而且对于如上定义的一个数组是不能访问它的任何元素的,我们必须要为它分配内存空间,这时要用到运算符new

    数组的初始化

    你可以在声明数组的同时进行初始化(静态初始化)

    也可以在声明以后进行初始化(动态初始化)

    // 静态初始化
    // 静态初始化的同时就为数组元素分配空间并赋值
    int intArray[] = {1,2,3,4};
    String stringArray[] = {"微学苑", "http://www.weixueyuan.net", "一切编程语言都是纸老虎"};

    // 动态初始化
    float floatArray[] = new float[3];
    floatArray[0] = 1.0f;
    floatArray[1] = 132.63f;
    floatArray[2] = 100F;

    与C、C++不同,Java对数组元素要进行越界检查以保证安全性

    Java提供了”增强版“的for循环,专门用来遍历数组(也被称为”foreach循环“)

    1. for( arrayType varName: arrayName ){
    2. // Some Code
    3. }

    arrayType 为数组类型(也是数组元素的类型);varName 是用来保存当前元素的变量,每次循环它的值都会改变;arrayName 为数组名称

    eg:

    1     int arrayDemo[] = {1, 2, 4, 7, 9, 192, 100};
    2     for(int x: arrayDemo){
    3     System.out.println(x + ", ");
    4     }

    Java语言中,由于把二维数组看作是数组的数组,数组空间不是连续分配的,所以不要求二维数组每一维的大小相同

    String字符串与数组有一个共同点,就是它们被初始化后,长度是不变的,并且内容也不变。如果要改变它的值,就会产生一个新的字符串

    StringBuffer类和String类一样,也用来表示字符串,但是StringBuffer的内部实现方式和String不同,在进行字符串处理时,不生成新的对象,在内存使用上要优于String。

    StringBuffer 默认分配16字节长度的缓冲区,当字符串超过该大小时,会自动增加缓冲区长度,而不是生成新的对象。

    StringBuffer不像String,只能通过 new 来创建对象,不支持简写方式

    StringBuilder类

    StringBuilder类和StringBuffer类功能基本相似,方法也差不多,主要区别在于StringBuffer类的方法是多线程安全的,而StringBuilder不是线程安全的,相比而言,StringBuilder类会略微快一点。

    线程安全:

    • StringBuffer:线程安全
    • StringBuilder:线程不安全

    使用环境:

    • 操作少量的数据使用 String;
    • 单线程操作大量数据使用 StringBuilder;
    • 多线程操作大量数据使用 StringBuffer

    构造方法的名称必须与类的名称相同,并且没有返回值。

    在Java中,使用new关键字来创建对象,一般有以下三个步骤:

    • 声明:声明一个对象,包括对象名称和对象类型。
    • 实例化:使用关键字new来创建一个对象。
    • 初始化:使用new创建对象时,会调用构造方法初始化对象。

    ava支持四种不同的访问权限:

    修饰符说明
    public 共有的,对所有类可见。
    protected 受保护的,对同一包内的类和所有子类可见。
    private 私有的,在同一类内可见。
    默认的 在同一包内可见。默认不使用任何修饰符。

     参数列表又叫参数签名,包括参数的类型、参数的个数和参数的顺序,只要有一个不同就叫做参数列表不同。

    虽然 Java 语言是典型的面向对象编程语言,但其中的八种基本数据类型并不支持面向对象编程,基本类型的数据不具备“对象”的特性——不携带属性、没有方法可调用。

    基本数据类型及对应的包装类
    基本数据类型对应的包装类
    byte Byte
    short Short
    int Integer
    long Long
    char Character
    float Float
    double Double
    boolean Boolean

    继承使用 extends 关键字

    单继承性:Java 允许一个类仅能继承一个其它类,即一个类只能有一个父类,这个限制被称做单继承性。后面将会学到接口(interface)的概念,接口允许多继承。


    注意:构造方法不能被继承,掌握这一点很重要。 一个类能得到构造方法,只有两个办法:编写构造方法,或者根本没有构造方法,类有一个默认的构造方法。

    super 关键字与 this 类似,this 用来表示当前类的实例,super 用来表示父类。

     super 与 this 的区别:super 不是一个对象的引用,不能将 super 赋值给另一个对象变量,它只是一个指示编译器调用父类方法的特殊关键字。
     方法覆盖的原则:
    • 覆盖方法的返回类型、方法名称、参数列表必须与原方法的相同。
    • 覆盖方法不能比原方法访问性差(即访问权限不允许缩小)。
    • 覆盖方法不能比原方法抛出更多的异常
    • 被覆盖的方法不能是final类型,因为final修饰的方法是无法覆盖的。
    • 被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。
    • 被覆盖的方法不能为static。如果父类中的方法为静态的,而子类中的方法不是静态的,但是两个方法除了这一点外其他都满足覆盖条件,那么会发生编译错误;反之亦然。即使父类和子类中的方法都是静态的,并且满足覆盖条件,但是仍然不会发生覆盖,因为静态方法是在编译的时候把静态方法和类的引用类型进行匹配

    覆盖和重载的不同:

    • 方法覆盖要求参数列表必须一致,而方法重载要求参数列表必须不一致。
    • 方法覆盖要求返回类型必须一致,方法重载对此没有要求。
    • 方法覆盖只能用于子类覆盖父类的方法,方法重载用于同一个类中的所有方法(包括从父类中继承而来的方法)。
    • 方法覆盖对方法的访问权限和抛出的异常有特殊的要求,而方法重载在这方面没有任何限制。
    • 父类的一个方法只能被子类覆盖一次,而一个方法可以在所有的类中可以被重载多次。

    多态存在的三个必要条件:要有继承、要有重写、父类变量引用子类对象。

    多态性带来了一个问题,就是如何判断一个变量所实际引用的对象的类型 。

    C++使用runtime-type information(RTTI)Java 使用 instanceof 操作符

    instanceof 运算符用来判断一个变量所引用的对象的实际类型,注意是它引用的对象的类型,不是变量的类型

    在继承链中,我们将子类向父类转换称为“向上转型”,将父类向子类转换称为“向下转型”

    很多时候,我们会将变量定义为父类的类型,却引用子类的对象,这个过程就是向上转型。程序运行时通过动态绑定来实现对子类方法的调用,也就是多态性。

    注意:不能直接将父类的对象强制转换为子类类型,只能将向上转型后的子类对象再次转换为子类类型。也就是说,子类对象必须向上转型后,才能再向下转型

    总结:对象的类型转换在程序运行时检查,向上转型会自动进行,向下转型的对象必须是当前引用类型的子类。
     static修饰的成员又称作类变量和类方法。

    静态变量属于类,不属于任何独立的对象,所以无需创建类的实例就可以访问静态变量。之所以会产生这样的结果,是因为编译器只为整个类创建了一个静态变量的副本,也就是只分配一个内存空间,虽然有多个实例,但这些实例共享该内存。实例变量则不同,每创建一个对象,都会分配一次内存空间,不同变量的内存相互独立,互不影响,改变 a 对象的实例变量不会影响 b 对象。

    关于静态变量和静态方法的总结:

    • 一个类的静态方法只能访问静态变量
    • 一个类的静态方法不能够直接调用非静态方法
    • 如访问控制权限允许,静态变量和静态方法也可以通过对象来访问,但是不被推荐;
    • 静态方法中不存在当前对象,因而不能使用 this,当然也不能使用 super
    • 静态方法不能被非静态方法覆盖;
    • 构造方法不允许声明为 static 的;
    • 局部变量不能使用static修饰。

    final 所修饰的数据具有“终态”的特征,表示“最终的”意思。具体规定如下:

    • final 修饰的类不能被继承
    • final 修饰的方法不能被子类重写
    • final 修饰的变量(成员变量或局部变量)即成为常量,只能赋值一次
    • final 修饰的成员变量必须在声明的同时赋值,如果在声明的时候没有赋值,那么只有 一次赋值的机会,而且只能在构造方法中显式赋值,然后才能使用。
    • final 修饰的局部变量可以只声明不赋值,然后再进行一次性的赋值。

    Object 类位于 java.lang 包中,是所有 Java 类的祖先,Java 中的每个类都由它扩展而来

    注意:

    • equals()方法只能比较引用类型,“==”可以比较引用类型及基本类型。
    • 用 equals() 方法进行比较时,对类 File、String、Date 及包装类来说是比较类型及内容而不考虑引用的是否是同一个实例。
    • 用“==”进行比较时,符号两边的数据类型必须一致(可自动转换的数据类型除外),否则编译出错,而用 equals 方法比较的两个数据只要都是引用类型即可

    在 Java 中,允许在一个类(或方法、语句块)的内部定义另一个类,称为内部类(Inner Class),有时也称为嵌套类(Nested Class)。

    到这里了,下次继续吧。累了。。

    http://www.weixueyuan.net/view/6321.html

    Coding
  • 相关阅读:
    C# FTP功能实现(转载)
    Invoke和BeginInvoke的使用(转载)
    .NET中各种数据库连接大全(转载)
    最近关注的网络资料(书签)
    SQL语句总结(转载)
    线程池和定时器——多线程的自动管理(转载)
    C#程序安装部署(转载)
    TcpClient.Connect函数连接超时的问题(转载)
    C# 各种定时器比较(转载)
    SQL SERVER中对日期字段(datetime)比较(转载)
  • 原文地址:https://www.cnblogs.com/ccie-leon-43093/p/5454742.html
Copyright © 2011-2022 走看看