美文网首页Java学习
Java学习(一)

Java学习(一)

作者: Andy_Livings | 来源:发表于2021-10-04 22:34 被阅读0次

    Java 教程

    • Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的高级程序设计语言。
    • Java 可运行于多个平台,如 Windows, Mac OS 及其他多种 UNIX 版本的系统。

    我的第一个 JAVA 程序

    public class HelloWorld {
        public static void main(String[] args) {
            System.out.println("Hello World");
        }
    }
    

    Java 简介

    Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 面向对象程序设计语言和 Java 平台的总称。由 James Gosling和同事们共同研发,并在 1995 年正式推出。

    后来 Sun 公司被 Oracle (甲骨文)公司收购,Java 也随之成为 Oracle 公司的产品。

    Java分为三个体系:

    • JavaSE(J2SE)(Java2 Platform Standard Edition,java平台标准版)
    • JavaEE(J2EE)(Java 2 Platform,Enterprise Edition,java平台企业版)
    • JavaME(J2ME)(Java 2 Platform Micro Edition,java平台微型版)。

    2005 年 6 月,JavaOne 大会召开,SUN 公司公开 Java SE 6。此时,Java 的各种版本已经更名,以取消其中的数字 "2":J2EE 更名为 Java EE,J2SE 更名为Java SE,J2ME 更名为 Java ME。

    主要特性

    • Java 语言是简单的:
      Java 语言的语法与 C 语言和 C++ 语言很接近,使得大多数程序员很容易学习和使用。另一方面,Java 丢弃了 C++ 中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java 语言不使用指针,而是引用。并提供了自动分配和回收内存空间,使得程序员不必为内存管理而担忧。

    • Java 语言是面向对象的:
      Java 语言提供类、接口和继承等面向对象的特性,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为 implements)。Java 语言全面支持动态绑定,而 C++语言只对虚函数使用动态绑定。总之,Java语言是一个纯的面向对象程序设计语言。

    • Java语言是分布式的:
      Java 语言支持 Internet 应用的开发,在基本的 Java 应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括 URL、URLConnection、Socket、ServerSocket 等。Java 的 RMI(远程方法激活)机制也是开发分布式应用的重要手段。

    • Java 语言是健壮的:
      Java 的强类型机制、异常处理、垃圾的自动收集等是 Java 程序健壮性的重要保证。对指针的丢弃是 Java 的明智选择。Java 的安全检查机制使得 Java 更具健壮性。

    • Java语言是安全的:
      Java通常被用在网络环境中,为此,Java 提供了一个安全机制以防恶意代码的攻击。除了Java 语言具有的许多安全特性以外,Java 对通过网络下载的类具有一个安全防范机制(类 ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类 SecurityManager)让 Java 应用设置安全哨兵。

    • Java 语言是体系结构中立的:
      Java 程序(后缀为 java 的文件)在 Java 平台上被编译为体系结构中立的字节码格式(后缀为 class 的文件),然后可以在实现这个 Java 平台的任何系统中运行。这种途径适合于异构的网络环境和软件的分发。

    • Java 语言是可移植的:
      这种可移植性来源于体系结构中立性,另外,Java 还严格规定了各个基本数据类型的长度。Java 系统本身也具有很强的可移植性,Java 编译器是用 Java 实现的,Java 的运行环境是用 ANSI C 实现的。

    • Java 语言是解释型的:
      如前所述,Java 程序在 Java 平台上被编译为字节码格式,然后可以在实现这个 Java 平台的任何系统中运行。在运行时,Java 平台中的 Java 解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。

    • Java 是高性能的:
      与那些解释型的高级脚本语言相比,Java 的确是高性能的。事实上,Java 的运行速度随着 JIT(Just-In-Time)编译器技术的发展越来越接近于 C++。

    • Java 语言是多线程的:
      在 Java 语言中,线程是一种特殊的对象,它必须由 Thread 类或其子(孙)类来创建。通常有两种方法来创建线程:其一,使用型构为 Thread(Runnable) 的构造子类将一个实现了 Runnable 接口的对象包装成一个线程,其二,从 Thread 类派生出子类并重写 run 方法,使用该子类创建的对象即为线程。值得注意的是 Thread 类已经实现了 Runnable 接口,因此,任何一个线程均有它的 run 方法,而 run 方法中包含了线程所要运行的代码。线程的活动由一组方法来控制。Java 语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为 synchronized)。

    • Java 语言是动态的:
      Java 语言的设计目标之一是适应于动态变化的环境。Java 程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有利于软件的升级。另外,Java 中的类有一个运行时刻的表示,能进行运行时刻的类型检查。

    Java 开发工具

    Java 语言尽量保证系统内存在 1G 以上,其他工具如下所示:

    Java 开发环境配置

    搭建Java开发环境

    Java 基础语法

    一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作。下面简要介绍下类、对象、方法和实例变量的概念。

    • 对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。
    • 类:类是一个模板,它描述一类对象的行为和状态。
    • 方法:方法就是行为,一个类可以有很多方法。逻辑运算、数据修改以及所有动作都是在方法中完成的。
    • 实例变量:每个对象都有独特的实例变量,对象的状态由这些实例变量的值决定。

    基本语法

    编写 Java 程序时,应注意以下几点:

    • 大小写敏感:Java 是大小写敏感的,这就意味着标识符 Hello 与 hello 是不同的。
    • 类名:对于所有的类来说,类名的首字母应该大写。如果类名由若干单词组成,那么每个单词的首字母应该大写,例如 MyFirstJavaClass 。
    • 方法名:所有的方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词首字母大写。
    • 源文件名:源文件名必须和类名相同。当保存文件的时候,你应该使用类名作为文件名保存(切记 Java 是大小写敏感的),文件名的后缀为 .java。(如果文件名和类名不相同则会导致编译错误)。
    • 主方法入口:所有的 Java 程序由 public static void main(String[] args) 方法开始执行。

    Java 标识符

    Java 所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。
    关于 Java 标识符,有以下几点需要注意:

    • 所有的标识符都应该以字母(A-Z 或者 a-z),美元符($)、或者下划线(_)开始
    • 首字符之后可以是字母(A-Z 或者 a-z),美元符($)、下划线(_)或数字的任何字符组合
    • 关键字不能用作标识符
    • 标识符是大小写敏感的
    • 合法标识符举例:age、$salary、_value、__1_value
    • 非法标识符举例:123abc、-salary

    Java修饰符

    像其他语言一样,Java可以使用修饰符来修饰类中方法和属性。主要有两类修饰符:

    • 访问控制修饰符 : default, public , protected, private
    • 非访问控制修饰符 : final, abstract, static, synchronized

    Java 变量

    Java 中主要有如下几种类型的变量

    • 局部变量
    • 类变量(静态变量)
    • 成员变量(非静态变量)

    Java 数组

    数组是储存在堆上的对象,可以保存多个同类型变量。

    Java 枚举

    Java 5.0引入了枚举,枚举限制变量只能是预先设定好的值。使用枚举可以减少代码中的 bug。
    例如,我们为果汁店设计一个程序,它将限制果汁为小杯、中杯、大杯。这就意味着它不允许顾客点除了这三种尺寸外的果汁。

    实例

    class FreshJuice {
       enum FreshJuiceSize{ SMALL, MEDIUM , LARGE }
       FreshJuiceSize size;
    }
     
    public class FreshJuiceTest {
       public static void main(String[] args){
          FreshJuice juice = new FreshJuice();
          juice.size = FreshJuice.FreshJuiceSize.MEDIUM  ;
       }
    }
    

    注意:枚举可以单独声明或者声明在类里面。方法、变量、构造函数也可以在枚举中定义。

    Java 关键字

    下面列出了 Java 关键字。这些保留字不能用于常量、变量、和任何标识符的名称。

    类别 关键字 说明
    访问控制 private 私有的
    访问控制 protected 受保护的
    访问控制 public 公共的
    访问控制 default 默认
    类、方法和变量修饰符 abstract 声明抽象
    类、方法和变量修饰符 class
    类、方法和变量修饰符 extends 扩充,继承
    类、方法和变量修饰符 final 最终值,不可改变的
    类、方法和变量修饰符 implements 实现(接口)
    类、方法和变量修饰符 interface 接口
    类、方法和变量修饰符 native 本地,原生方法(非 Java 实现)
    类、方法和变量修饰符 new 新,创建
    类、方法和变量修饰符 static 静态
    类、方法和变量修饰符 strictfp 严格,精准
    类、方法和变量修饰符 synchronized 线程,同步
    类、方法和变量修饰符 transient 短暂
    类、方法和变量修饰符 volatile 易失

    注意:Java 的 null 不是关键字,类似于 true 和 false,它是一个字面常量,不允许作为标识符使用。

    继承

    在 Java 中,一个类可以由其他类派生。如果你要创建一个类,而且已经存在一个类具有你所需要的属性或方法,那么你可以将新创建的类继承该类。
    利用继承的方法,可以重用已存在类的方法和属性,而不用重写这些代码。被继承的类称为超类(super class),派生类称为子类(subclass)。

    接口

    在 Java 中,接口可理解为对象间相互通信的协议。接口在继承中扮演着很重要的角色。
    接口只定义派生要用到的方法,但是方法的具体实现完全取决于派生类。

    Java 对象和类

    Java作为一种面向对象语言。支持以下基本概念:

    多态
    继承
    封装
    抽象
    类
    对象
    实例
    方法
    重载
    
    • 对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。
    • 类:类是一个模板,它描述一类对象的行为和状态。

    男孩(boy)、女孩(girl)为类(class),而具体的每个人为该类的对象(object)。
    汽车为类(class),而具体的每辆车为该汽车类的对象(object),对象包含了汽车的颜色、品牌、名称等。

    Java中的对象

    现在让我们深入了解什么是对象。看看周围真实的世界,会发现身边有很多对象,车,狗,人等等。所有这些对象都有自己的状态和行为。
    拿一条狗来举例,它的状态有:名字、品种、颜色,行为有:叫、摇尾巴和跑。
    对比现实对象和软件对象,它们之间十分相似。
    软件对象也有状态和行为。软件对象的状态就是属性,行为通过方法体现。
    在软件开发中,方法操作对象内部状态的改变,对象的相互调用也是通过方法来完成。

    Java 中的类

    类可以看成是创建 Java 对象的模板。


    WX20211004-170822

    通过上图创建一个简单的类来理解下 Java 中类的定义:

    public class Dog {
        String breed;
        int size;
        String colour;
        int age;
     
        void eat() {
        }
     
        void run() {
        }
     
        void sleep(){
        }
     
        void name(){
        }
    }
    

    一个类可以包含以下类型变量:

    局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
    成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
    类变量:类变量也声明在类中,方法体之外,但必须声明为 static 类型。

    构造方法

    每个类都有构造方法。如果没有显式地为类定义构造方法,Java 编译器将会为该类提供一个默认构造方法。
    在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。
    下面是一个构造方法示例:

    public class Puppy{
        public Puppy(){
        }
     
        public Puppy(String name){
            // 这个构造器仅有一个参数:name
        }
    }
    

    创建对象

    对象是根据类创建的。在Java中,使用关键字 new 来创建一个新的对象。创建对象需要以下三步:
    声明:声明一个对象,包括对象名称和对象类型。
    实例化:使用关键字 new 来创建一个对象。
    初始化:使用 new 创建对象时,会调用构造方法初始化对象。
    下面是一个创建对象的例子:

    public class Puppy {
       public Puppy(String name) {
          // 这个构造器仅有一个参数:name
          System.out.println("小狗的名字是 : " + name ); 
       }
       public static void main(String[] args) {
          // 下面的语句将创建一个Puppy对象
          Puppy myPuppy = new Puppy( "tommy" );
       }
    }
    

    编译并运行上面的程序,会打印出下面的结果:

    小狗的名字是 : tommy
    

    访问实例变量和方法

    通过已创建的对象来访问成员变量和成员方法,如下所示:

    /* 实例化对象 */
    Object referenceVariable = new Constructor();
    /* 访问类中的变量 */
    referenceVariable.variableName;
    /* 访问类中的方法 */
    referenceVariable.methodName();
    

    实例

    下面的例子展示如何访问实例变量和调用成员方法:

    public class Puppy {
       int puppyAge;
       public Puppy(String name) {
          // 这个构造器仅有一个参数:name
          System.out.println("小狗的名字是 : " + name ); 
       }
     
       public void setAge( int age ) {
           puppyAge = age;
       }
     
       public int getAge( ) {
           System.out.println("小狗的年龄为 : " + puppyAge ); 
           return puppyAge;
       }
     
       public static void main(String[] args) {
          /* 创建对象 */
          Puppy myPuppy = new Puppy( "tommy" );
          /* 通过方法来设定age */
          myPuppy.setAge( 2 );
          /* 调用另一个方法获取age */
          myPuppy.getAge( );
          /*你也可以像下面这样访问成员变量 */
          System.out.println("变量值 : " + myPuppy.puppyAge ); 
       }
    }
    

    编译并运行上面的程序,产生如下结果:

    小狗的名字是 : tommy
    小狗的年龄为 : 2
    变量值 : 2
    

    源文件声明规则

    源文件的声明规则。当在一个源文件中定义多个类,并且还有import语句和package语句时,要特别注意这些规则。

    • 一个源文件中只能有一个 public 类
    • 一个源文件可以有多个非 public 类
    • 源文件的名称应该和 public 类的类名保持一致。例如:源文件中 public 类的类名是 Employee,那么源文件应该命名为Employee.java。
    • 如果一个类定义在某个包中,那么 package 语句应该在源文件的首行。
    • 如果源文件包含 import 语句,那么应该放在 package 语句和类定义之间。如果没有 package 语句,那么 import 语句应该在源文件中最前面。
    • import 语句和 package 语句对源文件中定义的所有类都有效。在同一源文件中,不能给不同的类不同的包声明。

    类有若干种访问级别,并且类也分不同的类型:抽象类和 final 类等。
    除了上面提到的几种类型,Java 还有一些特殊的类,如:内部类匿名类

    Java 包

    包主要用来对类和接口进行分类。当开发 Java 程序时,可能编写成百上千的类,因此很有必要对类和接口进行分类。

    import 语句

    在 Java 中,如果给出一个完整的限定名,包括包名、类名,那么 Java 编译器就可以很容易地定位到源代码或者类。import 语句就是用来提供一个合理的路径,使得编译器可以找到某个类。
    例如,下面的命令行将会命令编译器载入 java_installation/java/io 路径下的所有类

    import java.io.*;
    

    一个简单的例子

    在该例子中,我们创建两个类:Employee 和 EmployeeTest。
    Employee 类有四个成员变量:name、age、designation 和 salary。该类显式声明了一个构造方法,该方法只有一个参数。

    Employee.java 文件代码:

    import java.io.*;
     
    public class Employee {
       String name;
       int age;
       String designation;
       double salary;
       // Employee 类的构造器
       public Employee(String name) {
          this.name = name;
       }
       // 设置age的值
       public void empAge(int empAge) {
          age =  empAge;
       }
       /* 设置designation的值*/
       public void empDesignation(String empDesig) {
          designation = empDesig;
       }
       /* 设置salary的值*/
       public void empSalary(double empSalary) { 
          salary = empSalary;
       }
       /* 打印信息 */
       public void printEmployee() {
          System.out.println("名字:"+ name );
          System.out.println("年龄:" + age );
          System.out.println("职位:" + designation );
          System.out.println("薪水:" + salary);
       }
    }
    

    程序都是从main方法开始执行。为了能运行这个程序,必须包含main方法并且创建一个实例对象。
    下面给出EmployeeTest类,该类实例化2个 Employee 类的实例,并调用方法设置变量的值。
    将下面的代码保存在 EmployeeTest.java文件中。

    EmployeeTest.java 文件代码:

    import java.io.*;
    
    public class EmployeeTest {
     
       public static void main(String[] args) {
          /* 使用构造器创建两个对象 */
          Employee empOne = new Employee("RUNOOB1");
          Employee empTwo = new Employee("RUNOOB2");
     
          // 调用这两个对象的成员方法
          empOne.empAge(26);
          empOne.empDesignation("高级程序员");
          empOne.empSalary(1000);
          empOne.printEmployee();
     
          empTwo.empAge(21);
          empTwo.empDesignation("菜鸟程序员");
          empTwo.empSalary(500);
          empTwo.printEmployee();
       }
    }
    

    编译这两个文件并且运行 EmployeeTest 类,可以看到如下结果:

    名字:RUNOOB1
    年龄:26
    职位:高级程序员
    薪水:1000.0
    名字:RUNOOB2
    年龄:21
    职位:菜鸟程序员
    薪水:500.0
    

    相关文章

      网友评论

        本文标题:Java学习(一)

        本文链接:https://www.haomeiwen.com/subject/oopinltx.html