重学 Java(第2天) 基础类型

238 阅读12分钟
简介
以前在学校主修Java,实习工作确实使用RN做App,出来也都十个月了,前段时间拾起Java,发现自己连 Hello World 都跑不动了 尴尬.jpg。
Java 才是王道
Java类 的基本构成
  • 包(package):
定义一个类的包由package语句定义
package packageName;

包(package)由一组类(class)和接口(interface)组成
    
第一个单词通常是开发这个包的组织的名称,例如 com、org、net、、、
第二个单词通常都是公司的名称
第三个、第四个通常都是范围逐渐缩小
    
包名通常都习惯使用小写表示

在Java语言中,最基本的包就是Java 语言核心 API
	java.lang:它是 Java语言中最核心的包,提供了最基本的数据类型,编程框架
  java.lang.reflect:反射类
  java.io:io就是 input/output 的缩写,它是 Java语言的标准输入/输出库
  java.util:它是由几个基本的实用类组成的,如日期类
  java.util.zip:文件压缩类包
  java.net:这是使用Java具备网络处理功能的类,使用这个包就可以轻松地创建、连接套接字(socket),可以编写出自己的 Telnet、FTP等程序
  java.awt:代表 java.awt 即 java.awt.image 等其他包。这些包就是通常说的 Java Abstract Window Toolkit(抽象窗口工具包,简称 AWT)。它是使用 Java开发图形界面程序时必不可少的一个包
  java.applet:Applet应用程序包。
  java.sql:在这个包中,包含了 JDBC(Java DataBase Connect,Java 数据库连接),使用它可以开发出数据库应用程序
  java.text:文本处理实体类
  • 引入(import):
在 Java 语言中,import 语句是用来通知 Java编译器,在这个程序中正在使用当前类外部的其它类
  
import 语句位于 package语句后面, 如果没有 package语句, 则必须放在类文件的开头。
  import packageName.className
  import packageName.*
  • 类(class):
Java 程序的基本单位是类,类的实例是对象,或者说对象是类定义的数据类型的变量
class是类的修饰符,用于给类命名,在类定义的开始于结束处必须使用花括号
  class className { }

类的名字通常都使用首字母大写的英文单词表示
  • 变量(variable):
一个类中通常都包含数据域函数两种类型的元素,叫做 变量 和 成员函数,成员函数也称为 方法。

变量也叫做 域,它是用于定义属于类的数据,这些数据是用来描述对象的状态,方法就是对这个数据进行操作的
  • 方法:
方法指引类进行具体的活动和操作
  • 注释:
单行注释://
多行注释: /* */
文档注释:/** */
  
常规注释
  @since 版本:表明这个特性是在软件的哪个版本之后开始提供的
  @deprecated 类、属性、方法名等:指出相应的类、方法或者属性不应该再使用
  @see 链接
 
 	@author 作者名
  @version 版本
  
  @param: 变量描述
  @return:该方法的返回值
  @throws:该方法抛出的异常
拓展
Java Socket:
	所谓socket 通常也称作”套接字“,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过”套接字”向网络发出请求或者应答网络请求。
Java 修饰符
修饰符变量方法
abstract[ˈæbstrækt]抽象类抽象方法
final[ˈfaɪnl]最终类最终变量最终方法
static[ˈstætɪk]静态变量静态方法
volatile[ˈvɒlətaɪl]易失变量
native[ˈneɪtɪv]本地方法
synchronized[sɪŋkrənaɪzd]同步方法
类的修饰符
  1. 抽象类:abstract

    凡是用 abstract 修饰符修饰的类被称为抽象类。抽象类就是没有具体对象的概念类
    
    在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
    
    抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。
    
    由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。
     
    相当于: 把房间搞得那么乱,天天跟你说不要乱扔东西。此时东西的概念就很广泛了,而抽象类就相当于这“东西”
    当看到方块类是抽象的,我会很关心它的抽象方法。我知道它的子类一定会重写它,而且,我会去找到抽象类的引用。它一定会有多态性的体现。
    
    但是,如果你没有这样做,我会认为可能会在某个地方,你会实例化一个方块类的实例,但我找了所有的地方都没有找到。最后我会大骂你一句,你是来欺骗我的吗,你这个白痴。
    
  2. 最终类:final

    如果一个类被final修饰符所修饰和限定,那么这个类不可能有子类
    被定义为final的类通常是一些有固定作用用来完成某些标准功能的类
    
变量的修饰符

​ 变量是类和对象的成员属性,定义域的操作就是说明变量或创建对象的操作

  1. 静态变量:static

    static 修饰符修饰的域是仅属于类的静态变量。静态变量是类中每个对象共享的变量,它们是类的变量,不属于任何一个类的具体对象,是一个公共的存储单元, 任何一个类的对象访问它时,取到的都是相同的数值
    
  2. 静态初始化容器:static

    静态初始化器是由关键字 static 引导的一对大括号括起的语句 组。作用是在加载时,初始化类的静态变量
    与构造函数相同,他们都是用来完成初始化的工作的,但是静态初始化器与构造函数有3点不同
      1. 构造函数是对每个新创建的对象初始化,而静态初始化器对类自身进行初始化
      2. 构造函数是在用new 运算符产生新对象时由系统自动执行,而静态初始化器则是它所属的类加载到内存时由系统调用执行
      3. 不同于构造函数,静态初始化器不是方法,没有方法名、返回值和参数列表
      
    static {
      system.out.println("正在执行初始化");
    }
    
  3. 最终变量:final

    final修饰的变量,实际上就是Java中的常量。用final修饰符说明常量时,需要注意以写几点
      需要说明常量的数据类型。
      需要同时指出常量的具体取值。
      因为所有类对象的常量成员,其数值都固定一致,为了节省空间,常量通常声明为staticfinal String world = "World";
    
  4. 易失变量:volatile

    	如果一个域被volatile修饰符修饰,说明这个域可能同时被几个线程所控制和修改,即这个域不仅仅被当前程序所掌握,在运行过程中,可能受到其他未知的程序操作影响和改变该域的取值
      通常,volatile用来修饰接受外部输入的变量。如表示当前时间的变量将系统的后台线程随时修改,以保证程序中取到的总是最新的当前系统时间,所以可以把它定义为易失变量。
    
    volatile String world = "world";
    
方法的修饰符

​ 方法是类的动态属性,标志了类所具有的功能和操作。小括号是方法的标志。

  1. 抽象方法:abstract

    修饰符 abstract修饰的抽象方法是一种仅有方法头,而没有具体的方法体和操作实现的方法,使用抽象方法的目的是使所有的子类对外都呈现一个相同名字的方法,是一个统一的接口。所有的抽象方法,都必须存在于抽象类之中。
      
    abstract class className{
      abstract void func();
    }
    该方法必须由子类来实现,才能够被调用。
    
  2. 静态方法:static

    static 修饰符修饰的方法,是属于整个类的方法,不用的是对象或实例的方法。调用这种方法时,应该使用类名作为前缀;这种方法在内存中的代码段将随着类的定义而分配和装载,不被任何一个对象专有;只能处理属于整个类的成员变量
     
    static void hello() {
      System.out.println("这是一个静态方法");
    }
    
  3. 最终方法:final

    final修饰符修饰的类方法,功能和内部语句不能再更改的方法,不能再被继承
    在被继承时,该方法不能够被重写
      
    所有已被private修饰符限定为私有方法,以及所有包含在final 类中的方法,都被默认的认为是 final
  4. 本地方法:native

    native修饰符声明其他语言书写方法体并具体实现方法功能的特殊的方法。这里的其他语言包括C/C++/汇编等。由于native的方法的方法体使用其他语言在程序外部写成,所以所有的native方法都没有方法体,而用一个分号代替。
    
    public native int method();
    很多本机方法是用C写的。把C代码结合到Java程序中的机制是调用 Java Native Interface(JNI)
    
  5. 同步方法:synchronized

    如果synchronized修饰的方法是一个类的方法(即static的方法),那么在被调用执行前,将把系统类Class中对应当前类的对象加锁。如果synchronized修饰的是一个对象的方法(未用static修饰的方法),则这个方法在被调用执行前,将当前对象加锁。synchronized 修饰符主要用于多线程共存的程序中的协调和同步。 
    
访问控制符

​ 访问控制符是一组限定类、域或方法是否可以被程序里的其他部分访问和调用的修饰符。类的访问控制符只有一个 public,变量和方法的访问控制符有3个,分别是public、private和protected,另外还有一种没有定义专门的访问控制符的默认情况。

修饰符变量方法
public
默认无修饰符
private
protected
  1. 公有访问控制符(public)

    当使用了 public声明时,它才具有了被其它包访问的可能性,只要使用 import语句引入public类,就可以访问和引用这个类。每个Java程序的主类都必须是public 类,也是基于相同的原因
    
    用 public修饰的类的变量称为公共变量。如果公共变量属于公共类,则它能被所有的其他类锁引用。public修饰符会造成安全性的数据封装性下降,尽量少用public
  2. 私有访问控制符(private)

    private 修饰的变量或方法只能被该类自身所访问和修改,而且不能被任何其他类(包括该类的子类)来获取和引用
    
  3. 保护访问控制符(protected)

    protected修饰的成员变量可以被3种类所引用:该类自身、与它在同一个包的其它类、在其他包中的该类的子类。使用protected修饰符的主要作用是允许其他包中该类的子类来访问父类的特定属性
    
  4. 默认访问控制符

    默认访问控制器规定,该类只能被同一个包中的类访问和引用,而不可以被其它包中的类使用,这种访问特性又称为包访问性
    
总结
public: 任何地方均可访问
protected:同一个包和子类可见
默认:同一个包中可见
private:进该类内部可见
Java变量

​ 在 Java语言中,对象就是由数据及对这些数据的操作组成的

​ 变量就是数据的容器,在Java语言中,它被称为域。变量就是在内存中预分配一个空间,这个空间里可以根据需要存放不同的数据

定义变量:就像在内存中拿到一块空间,然后标上自己的名字,这个名字就是变量名。
给变量赋值:就像将一个数或一个字符,放到刚才分配的空间里去
修改变量的值:与给变量赋值类似,只是这个变量里本身就存在一个值,新的一个值是取而代之
定义一个变量
在 Java中,使用变量之前,必须先定义变量的类型和名字。定义变量也可以成为"声明变量"
  变量类型 变量名;
变量的命名规则
变量名可以由字母字符、数字、标点组成
变量名必须以字母字符、$、_开头
变量名不能与Java语言的保留字重名
  
注:
  Java 语言的变量是区分大小写的,world和World是两个不同的变量
  以$符开始的变量是合法的,但是不推荐使用
Java保留关键字
保留关键字是指被Java本身使用的字母组合,由于在程序中有特殊的意义,所以不能用做变量名。Java语言有51个保留关键字,这51个关键字分为8个类
变量赋值的两种方法
简单赋值:变量名 = 值
定义赋值:变量类型 = 值
  
int num;
num = 10;

int count = 10;
变量的作用范围
一个变量的作用范围外可以有一个与它同名的变量名存在
成员变量与局部变量
成员变量:作为类的成员而存在,直接存在于类中
局部变量:作为方法或语句块的成员而存在,存在于方法的参数列表和方法定义中

局部变量在使用前必须被主动初始化,而系统中的成员变量则会被系统提供一个默认的初始值。
所有类的成员变量可以通过this 来引用。成员变量又分成两种类型:实例变量和静态变量。