从net到java:java快速入门
1.注释
注释的重要性不言而喻,我们不管写什么代码注释必不可少,那么java的注释的书写方式与注释模板是怎么进行的呢?我们来看一下。
package frist;/*
* @Description HelloWorld类
* @Author 王延领
**/class HelloWorld { /*
这是我们Java程序的主入口,
main方法也是程序的主线程。
*/
public static void main(String[] arg)
{ //输出
System.out.println("wyl");
}
}
1.1 注释
以上可以看出java的注释主要有三种
单行注释:只能注释当前行,以//开始,直到行结束
//输出
多行注释:注释一段文字,以/*开始, */结束!
/*
这是我们Java程序的主入口,
main方法也是程序的主线程。
*/
文档注释:用于生产API文档,配合JavaDoc。
/*
* @Description HelloWorld类
* @Author 王延领
**/
1.2 idea注释模版配置
1.2.1 定义java文件头部的注释
File => setting => editor => File and Code Templates-class -Includes
/**
* @创建人 王延领
*@创建时间 ${DATE}
*描述 Todo
**/
以上当你创建一个class的时候就会带上以上信息了
1.2.2 给java类中的方法添加上注释
第一步勾选Enable Live Templates
首先要在上一步中勾选中 Enable Live Templates
第二步新建一个Group
其次要打开LiveTemplates 然后新建一个Group
如图:
在弹窗口中输入你想要的group名称,wyl
其中:Abbreviation 为快捷键,当输入w的时候就会提示对应的方法注释模板,j为类的注释模板
Templete Text
注释内容,$$ 为动态模板参数点击Edit Vaariables 选择对应动态值。
/*
* @描述: TODO
* @作者 王延领
* @时间 2021/7/12
* @版本 1.0
*/public class wyl { /**
*@描述
*@参数 [str]
*@返回值 [java.lang.String]
*@创建人 王延领
*@创建时间 2021/7/12
*@修改人和其它信息
*/
public String CommentTemplate(String str)
{ return str;
}
}
2.关键字
关键字
说明
private
一种访问控制方式:私用模式
protected
一种访问控制方式:保护模式
public
一种访问控制方式:共用模式
abstract
表明类或者成员方法具有抽象属性
class
类
extends
表明一个类型是另一个类型的子类型,这里常见的类型有类和接口
final
用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变
implements
表明一个类实现了给定的接口
interface
接口
native
用来声明一个方法是由与计算机相关的语言(如C/C++/FORTRAN语言)实现的
new
用来创建新实例对象
static
表明具有静态属性
strictfp
用来声明FP_strict(单精度或双精度浮点数)表达式遵循IEEE 754算术规范
synchronized
表明一段代码需要同步执行
transient
声明不用序列化的成员域
volatile
表明两个或者多个变量必须同步地发生变化
break
提前跳出一个块
continue
回到一个块的开始处
return
从成员方法中返回数据
do
用在do-while循环结构中
while
用在循环结构中
if
条件语句的引导词
else
用在条件语句中,表明当条件不成立时的分支
for
一种循环结构的引导词
instanceof
用来测试一个对象是否是指定类型的实例对象
switch
分支语句结构的引导词
case
用在switch语句之中,表示其中的一个分支
default
默认,例如,用在switch语句中,表明一个默认的分支
try
尝试一个可能抛出异常的程序块
catch
用在异常处理中,用来捕捉异常
throw
抛出一个异常
throws
声明在当前定义的成员方法中所有需要抛出的异常
import
表明要访问指定的类或包
package
包
boolean
基本数据类型之一,布尔类型
byte
基本数据类型之一,字节类型
char
基本数据类型之一,字符类型
double
基本数据类型之一,双精度浮点数类型
float
基本数据类型之一,单精度浮点数类型
int
基本数据类型之一,整数类型
long
基本数据类型之一,长整数类型
short
基本数据类型之一,短整数类型
super
表明当前对象的父类型的引用或者父类型的构造方法
this
指向当前实例对象的引用
void
声明当前成员方法没有返回值
goto
保留关键字,没有具体含义
const
保留关键字,没有具体含义
3.数据类型
3.1.数据类型转换
3.1.1自动类型转换
自动类型转换:容量小的数据类型可以自动转换为容量大的数据类型。
注:如果低级类型为char型,向高级类型(整型)转换时,会转换为对应ASCII码值
3.1.2 强制类型转换
强制类型转换,又被称为造型,用于显式的转换一个数值的类型.
转换方式为:(type)var ,运算符“()”中的type表示将值var想要转换成的目标数据类型。 条件是转换的数据类型必须是兼容的。
double x = 3.14;int nx = (int)x; //值为3char c = 'a';int d = c+1;
System.out.println(d); //98System.out.println((char)d); //b
3.1.3.包装类过渡类型转换
eg1:int i=Integer.parseInt(“123”)
说明:此方法只能适用于字符串转化成整型变量
eg2: float f=Float.valueOf(“123”).floatValue()
说明:上例是将一个字符串转化成一个Float对象,然后再调用这个对象的floatValue()方法返回其对应的float数值。
eg3: boolean b=Boolean.valueOf(“123”).booleanValue()
说明:上例是将一个字符串转化成一个Boolean对象,然后再调用这个对象的booleanValue()方法返回其对应的boolean数值。
eg4:double d=Double.valueOf(“123”).doublue()
说明:上例是将一个字符串转化成一个Double对象,然后再调用这个对象的doublue()方法返回其对应的double数值。
eg5: long l=Long.valueOf(“123”).longValue()
说明:上例是将一个字符串转化成一个Long对象,然后再调用这个对象的longValue()方法返回其对应的long数值。
eg6: char=Character.valueOf(“123”).charValue()
说明:上例是将一个字符串转化成一个Character对象
4.常量、变量、运算符
常量
变量是什么:就是可以变化的量!
我们通过变量来操纵存储空间中的数据,变量就是指代这个存储空间!空间位置是确定的,但是里面放
置什么值不确定!Java是一种强类型语言,每个变量都必须声明其类型。
//数据类型 变量名 = 值;可以使用逗号隔开来声明多个同类型变量。
注意事项:
每个变量都有类型,类型可以是基本类型,也可以是引用类型。
变量名必须是合法的标识符。
变量声明是一条完整的语句,因此每一个声明都必须以分号结束
变量作用域
类变量(静态变量: static variable):独立于方法之外的变量,用 static 修饰。
实例变量(成员变量:member variable):独立于方法之外的变量,不过没有 static 修饰。
局部变量(lacal variable):类的方法中的变量。
变量
常量(Constant):初始化(initialize)后不能再改变值!不会变动的值。
final 常量名=值;final double PI=3.14;
命名规范
-
所有变量、方法、类名:见名知意
-
类成员变量:首字母小写和驼峰原则 : monthSalary
-
局部变量:首字母小写和驼峰原则
-
常量:大写字母和下划线:MAX_VALUE
-
类名:首字母大写和驼峰原则: Man, GoodMan
-
方法名:首字母小写和驼峰原则: run(), runRun()
运算符
Java 语言支持如下运算符:
算术运算符: +,-,
,/,%,++,--
赋值运算符 =
关系运算符: >,<,>=,<=,==,!= instanceof
逻辑运算符: &&,||,!
位运算符: &,|,^,~ , >>,<<,>>> (了解!!!)
条件运算符 ?:
扩展赋值运算符:+=,-=,
=,/=
5.java流转控制
if...else、while、do...while、for、switch...case 在这就不累述了。
跳转:
return
return从一个方法返回,并把控制权交给调用它的语句序;或者直接结束当前的程序;
break
break语句在for、while、do···while循环语句中,经常用于强行退出当前循环;
continue
continue语句用于跳过此次循环,执行下次循环;
6.方法
那么什么是方法呢?
Java方法是语句的集合,它们在一起执行一个功能。
方法是解决一类问题的步骤的有序组合
方法包含于类或对象中
方法在程序中被创建,在其他地方被引用
设计方法的原则:方法的本意是功能块,就是实现某个功能的语句块的集合。我们设计方法的时候,最
好保持方法的原子性,就是一个方法只完成1个功能,这样利于我们后期的扩展。
方法的优点
使程序变得更简短而清晰。
有利于程序维护。
可以提高程序开发的效率。
提高了代码的重用性。
定义
修饰符 返回值类型 方法名(参数类型 参数名){
...
方法体
...return 返回值;
}
**修饰符:**修饰符,这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。
**返回值类型 :**方法可能会返回值。returnValueType 是方法返回值的数据类型。有些方法执行所需
的操作,但没有返回值。在这种情况下,returnValueType 是关键字void。
**方法名:**是方法的实际名称。方法名和参数表共同构成方法签名。
**参数类型:**参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参
数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。
形式参数:在方法被调用时用于接收外界输入的数据。
实参:调用方法时实际传给方法的数据。
**方法体:**方法体包含具体的语句,定义该方法的功能。
方法的重载
就是说一个类的两个方法拥有相同的名字,但是有不同的参数列表。
可变参数
在方法声明中,在指定参数类型后加一个省略号(...) 。
一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声
明。
typeName... parameterName
递归
自己调用自己
7.数组
数组的定义:
数组是相同类型数据的有序集合.
数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。
其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们.
数组的四个基本特点:
-
其长度是确定的。数组一旦被创建,它的大小就是不可以改变的。
-
其元素必须是相同类型,不允许出现混合类型。
-
数组中的元素可以是任何数据类型,包括基本类型和引用类型。
-
数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量
数组声明
dataType[] arrayRefVar; // 首选的方法或
dataType arrayRefVar[]; // 效果相同,但不是首选方法
创建数组
arrayRefVar = new dataType[1 arraySize];
数组的元素是通过索引访问的。数组索引从 0 开始,所以索引值从 0 到 arrayRefVar.length-1。
三种初始化
静态初始化
除了用new关键字来产生数组以外,还可以直接在定义数组的同时就为数组元素分配空间并赋值。
int[] a = {1,2,3};
Man[] mans = {new Man(1,1),new Man(2,2)};
动态初始化
数组定义、为数组元素分配空间、赋值的操作、分开进行。
int[] a = new int[2];
a[0]=1;
a[1]=2;
数组的默认初始化
数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实
例变量同样的方式被隐式初始化。
public static void main(String[] args) {int[] a=new int[2];boolean[] b = new boolean[2];
String[] s = new String[2];
System.out.println(a[0]+":"+a[1]); //0,0System.out.println(b[0]+":"+b[1]); //false,falseSystem.out.println(s[0]+":"+s[1]); //null, null}
数组边界
下标的合法区间:[0, length-1],如果越界就会报错;
for 和For-Each 循环
for(type element: array){
System.out.println(element);
}
for (int i = 1; i < myList.length; i++) {
System.out.println(myList[i]);
}
多维数组
type[][] typeName = new type[typeLength1][1 typeLength2];
Arrays 类
数组的工具类java.util.Arrays
java.util.Arrays 类能方便地操作数组. 使用之前需要导包!
具有以下常用功能:
给数组赋值:通过 fill 方法。
对数组排序:通过 sort 方法,按升序。
比较数组:通过 equals 方法比较数组中元素值是否相等。
查找数组元素:通过 binarySearch 方法能对排序好的数组进行二分查找法操作。
转换为list: 通过asList(a)进行转换
8.面向对象
万物皆为对象!!!对象是抽象概念的具体实例。
以类的方式组织代码,以对象的组织(封装)数据就是面向对象
继承
继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。
class 父类 {
}class 子类 extends 父类 {
}public interface A { public void eat(); public void sleep();
}
public interface B { public void show();
}
public class C implements A,B {
}
为什么要继承,因为有重复。所以才继承,进而我们就知道了。父类就是公共部分的定义或规则
Java 不支持多继承(只能继承一个类),但支持多重继承。
特点
-
子类拥有父类非 private 的属性、方法。
-
子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
-
子类可以用自己的方式实现父类的方法。
-
Java 的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如 B 类继承 A 类,C 类继承 B 类,所以按照关系就是 B 类是 C 类的父类,A 类是 B 类的父类,这是 Java 继承区别于 C++ 继承的一个特性。
-
提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性越差)
super 与 this 关键字
class Animal { void eat() {
System.out.println("animal : eat");
}
}
class Dog extends Animal { void eat() {
System.out.println("dog : eat");
} void eatTest() { this.eat(); // this 调用自己的方法
super.eat(); // super 调用父类方法
}
}
public class Test { public static void main(String[] args) {
Animal a = new Animal();
a.eat();
Dog d = new Dog();
d.eatTest();
}
}
animal : eatdog : eatanimal : eat
final关键字
final 关键字声明类可以把类定义为不能继承的,即最终类;
class SuperClass { private int n;
SuperClass(){
System.out.println("SuperClass()");
}
SuperClass(int n) {
System.out.println("SuperClass(int n)"); this.n = n;
}
}// SubClass 类继承class SubClass extends SuperClass{ private int n;
SubClass(){ // 自动调用父类的无参数构造器
System.out.println("SubClass");
}
public SubClass(int n){
super(300); // 调用父类中带有参数的构造器
System.out.println("SubClass(int n):"+n); this.n = n;
}
}// SubClass2 类继承class SubClass2 extends SuperClass{ private int n;
SubClass2(){ super(300); // 调用父类中带有参数的构造器
System.out.println("SubClass2");
}
public SubClass2(int n){ // 自动调用父类的无参数构造器
System.out.println("SubClass2(int n):"+n); this.n = n;
}
}public class TestSuperSub{ public static void main (String args[]){
System.out.println("------SubClass 类继承------");
SubClass sc1 = new SubClass();
SubClass sc2 = new SubClass(100);
System.out.println("------SubClass2 类继承------");
SubClass2 sc3 = new SubClass2();
SubClass2 sc4 = new SubClass2(200);
}
}
------SubClass 类继承------
SuperClass()SubClassSuperClass(int n)SubClass(int n):100
------SubClass2 类继承------SuperClass(int n)SubClass2SuperClass()SubClass2(int n):200
构造函数
子类是不继承父类的构造器(构造方法或者构造函数)的,它只是调用(隐式或显式)。如果父类的构造器带有参数,则必须在子类的构造器中显式地通过 super 关键字调用父类的构造器并配以适当的参数列表。
如果父类构造器没有参数,则在子类的构造器中不需要使用 super 关键字调用父类构造器,系统会自动调用父类的无参构造器。
重写(Override)与重载(Overload)
重写(Override)
重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写
class Animal{ public void move(){
System.out.println("动物可以移动");
}
}
class Dog extends Animal{ public void move(){
System.out.println("狗可以跑和走");
}
}
public class TestDog{ public static void main(String args[]){
Animal a = new Animal(); // Animal 对象
Animal b = new Dog(); // Dog 对象
a.move();// 执行 Animal 类的方法
b.move();//执行 Dog 类的方法
}
}
动物可以移动
狗可以跑和走
方法的重写规则
-
参数列表与被重写方法的参数列表必须完全相同。
-
返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类(java5 及更早版本返回类型要一样,java7 及更高版本可以不同)。
-
访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为 public,那么在子类中重写该方法就不能声明为 protected。
-
父类的成员方法只能被它的子类重写。
-
声明为 final 的方法不能被重写。
-
声明为 static 的方法不能被重写,但是能够被再次声明。
-
子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为 private 和 final 的方法。
-
子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非 final 方法。
-
重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
-
构造方法不能被重写。
-
如果不能继承一个类,则不能重写该类的方法。
重载(Overload)
重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。
最常用的地方就是构造器的重载。
public class Overloading { public int test(){
System.out.println("test1"); return 1;
}
public void test(int a){
System.out.println("test2");
}
//以下两个参数类型顺序不同
public String test(int a,String s){
System.out.println("test3"); return "returntest3";
}
public String test(String s,int a){
System.out.println("test4"); return "returntest4";
}
public static void main(String[] args){
Overloading o = new Overloading();
System.out.println(o.test());
o.test(1);
System.out.println(o.test(1,"test3"));
System.out.println(o.test("test4",1));
}
}
重载规则:
-
被重载的方法必须改变参数列表(参数个数或类型不一样);
-
被重载的方法可以改变返回类型;
-
被重载的方法可以改变访问修饰符;
-
被重载的方法可以声明新的或更广的检查异常;
-
方法能够在同一个类中或者在一个子类中被重载。
-
无法以返回值类型作为重载函数的区分标准。
区别点
重载方法
重写方法
参数列表
必须修改
一定不能修改
返回类型
可以修改
一定不能修改
异常
可以修改
可以减少或删除,一定不能抛出新的或者更广的异常
访问
可以修改
一定不能做更严格的限制(可以降低限制)
多态
多态是同一个行为具有多个不同表现形式或形态的能力。
多态就是同一个接口,使用不同的实例而执行不同操作。
多态性是对象多种表现形式的体现。
多态的优点
-
消除类型之间的耦合关系
-
可替换性
-
可扩充性
-
接口性
-
灵活性
-
简化性
多态存在的三个必要条件
继承
重写
父类引用指向子类对象:Parent p = new Child();
class Shape { void draw() {}
}
class Circle extends Shape { void draw() {
System.out.println("Circle.draw()");
}
}
class Square extends Shape { void draw() {
System.out.println("Square.draw()");
}
}
class Triangle extends Shape { void draw() {
System.out.println("Triangle.draw()");
}
}
虚函数
虚函数的存在是为了多态。
Java 中其实没有虚函数的概念,它的普通函数就相当于 C++ 的虚函数,动态绑定是Java的默认行为。如果 Java 中不希望某个函数具有虚函数特性,可以加上 final 关键字变成非虚函数。
多态的实现方式
方式一:重写:
方式二:接口
方式三:抽象类和抽象方法
抽象类
拥有抽象方法的类就是抽象类,抽象类要使用abstract关键字声明.
abstract class A{//定义一个抽象类
public void fun(){//普通方法
System.out.println("存在方法体的方法");
} public abstract void print();//抽象方法,没有方法体,有abstract关键字做修饰
}
继承抽象类
我们可以通过以下方式继承 Employee 类的属性
抽象类的使用原则
(1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public;
(2)抽象类不能直接实例化,需要依靠子类采用向上转型的方式处理;
(3)抽象类必须有子类,使用extends继承,一个子类只能继承一个抽象类;
(4)子类(如果不是抽象类)则必须覆写抽象类之中的全部抽象方法(如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。);
package com.wz.abstractdemo;abstract class A{//定义一个抽象类
public void fun(){//普通方法
System.out.println("存在方法体的方法");
}
public abstract void print();//抽象方法,没有方法体,有abstract关键字做修饰
}//单继承class B extends A{//B类是抽象类的子类,是一个普通类
@Override
public void print() {//强制要求覆写
System.out.println("Hello World !");
}
}public class TestDemo { public static void main(String[] args) {
A a = new B();//向上转型
a.print();//被子类所覆写的过的方法
}
}
Hello World !
封装
封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。
封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
要访问该类的代码和数据,必须通过严格的接口控制。
封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。
封装的优点
-
良好的封装能够减少耦合。
-
类内部的结构可以自由修改。
-
可以对成员变量进行更精确的控制。
-
隐藏信息,实现细节。
接口
在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。
接口与类相似点
-
一个接口可以有多个方法。
-
接口文件保存在 .java 结尾的文件中,文件名使用接口名。
-
接口的字节码文件保存在 .class 结尾的文件中。
-
接口相应的字节码文件必须在与包名称相匹配的目录结构中。
接口与类的区别
-
接口不能用于实例化对象。
-
接口没有构造方法。
-
接口中所有的方法必须是抽象方法,Java 8 之后 接口中可以使用 default 关键字修饰的非抽象方法。
-
接口不能包含成员变量,除了 static 和 final 变量。
-
接口不是被类继承了,而是要被类实现。
-
接口支持多继承。
接口特性
-
接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
-
接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
-
接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。
抽象类和接口的区别
-
抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
-
抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
-
接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法
-
一个类只能继承一个抽象类,而一个类却可以实现多个接口。
[可见度] interface 接口名称 [extends 其他的接口名] { // 声明变量 // 抽象方法}
/* 文件名 : NameOfInterface.java /import java.lang.;//引入包 public interface NameOfInterface{ //任何类型 final, static 字段 //抽象方法}
接口有以下特性
-
接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字。
-
接口中每一个方法也是隐式抽象的,声明时同样不需要abstract关键字。
-
接口中的方法都是公有的。
枚举
枚举是一个特殊的类,一般表示一组常量.每个枚举都是通过 Class 在内部实现的,且所有的枚举值都是 public static final 的。
enum Color{
RED, GREEN, BLUE;
}
public class Test{ // 执行输出结果
public static void main(String[] args)
{
Color c1 = Color.RED;
System.out.println(c1);
}
}
RED
values(), ordinal() 和 valueOf() 方法
enum 定义的枚举类默认继承了 java.lang.Enum 类,并实现了 java.lang.Seriablizable 和 java.lang.Comparable 两个接口。
values(), ordinal() 和 valueOf() 方法位于 java.lang.Enum 类中:
-
values() 返回枚举类中所有的值。
-
ordinal()方法可以找到每个枚举常量的索引,就像数组索引一样。
-
valueOf()方法返回指定字符串值的枚举常量。
enum Color{ RED, GREEN, BLUE; } public class Test{ public static void main(String[] args) { // 调用 values() Color[] arr = Color.values(); // 迭代枚举 for (Color col : arr) { // 查看索引 System.out.println(col + " at index " + col.ordinal()); } // 使用 valueOf() 返回枚举常量,不存在的会报错 IllegalArgumentException System.out.println(Color.valueOf("RED")); // System.out.println(Color.valueOf("WHITE")); } } RED at index 0GREEN at index 1BLUE at index 2RED枚举成员
枚举跟普通类一样可以用自己的变量、方法和构造函数,构造函数只能使用 private 访问修饰符,所以外部无法调用。
enum Color{ RED, GREEN, BLUE; // 构造函数 private Color() { System.out.println("Constructor called for : " + this.toString()); } public void colorInfo() { System.out.println("Universal Color"); } }
包(package)
为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。
包的 3 个作用如下
-
区分相同名称的类。
-
能够较好地管理大量的类。
-
控制访问范围。
定义
```java
package 包名;
```
Java 包的命名规则如下:
-
包名全部由小写字母(多个单词也全部小写)。
-
如果包名包含多个层次,每个层次用“.”分割。
-
包名一般由倒置的域名开头,比如 com.baidu,不要有 www。
-
自定义包不能 java 开头
包导入
\\如果使用不同包中的其它类,需要使用该类的全名(包名+类名)
example.Test test = new example.Test();
\\import 包名+类名;import example.Test;\\orimport example.*;
系统包
包
说明
java.lang
Java 的核心类库,包含运行 Java 程序必不可少的系统类,如基本数据类型、基本数学函数、 字符串处理、异常处理和线程类等,系统默认加载这个包
java.io
Java 语言的标准输入/输出类库,如基本输入/输出流、文件输入/输出、过滤输入/输出流等
java.util
包含如处理时间的 Date 类,处理动态数组的 Vector 类,以及 Stack 和 HashTable 类
java.awt
构建图形用户界面(GUI)的类库,低级绘图操作 Graphics 类、图形界面组件和布局管理 (如 Checkbox 类、Container 类、LayoutManger 接口等),以及用户界面交互控制和事 件响应(如 Event 类)
java.awt.image
处理和操纵来自网上的图片的 Java 工具类库
java.wat.peer
很少在程序中直接用到,使得同一个 Java 程序在不同的软硬件平台上运行
java.net
实现网络功能的类库有 Socket 类、ServerSocket 类
java.lang.reflect
提供用于反射对象的工具
java.util.zip
实现文件压缩功能
java.awt.datatransfer
处理数据传输的工具类,包括剪贴板、字符串发送器等
java.sql
实现 JDBC 的类库
java.rmi
提供远程连接与载入的支持
java. security
提供安全性方面的有关支持
9.异常处理
异常处理的概念
是编程语言或计算机硬件里的一种机制,用于处理软件或信息系统中出现的异常状况(即超出程序正常执行流程的某些特殊条件)。
关键字
Java异常机制用到的几个关键字:try、catch、finally、throw、throws。
try -- 用于监听。将要被监听的代码(可能抛出异常的代码)放在try语句块之内,当try语句块内发生异常
时,异常就被抛出。
catch -- 用于捕获异常。catch用来捕获try语句块中发生的异常。
finally -- finally语句块总是会被执行。它主要用于回收在try块里打开的物力资源(如数据库连接、网络
连接和磁盘文件)。只有finally块,执行完成之后,才会回来执行try或者catch块中的return或者throw语
句,如果finally中使用了return或者throw等终止方法的语句,则就不会跳回执行,直接停止。
throw -- 用于抛出异常。
throws -- 用在方法签名中,用于声明该方法可能抛出的异常。
try{
可能会发生的异常
}catch(异常类型 异常名(变量)){
针对异常进行处理的代码
}catch(异常类型 异常名(变量)){
针对异常进行处理的代码
}...
[finally{ 释放资源代码; }]
Error与Exception区别
Error(错误)是系统中的错误,程序员是不能改变的和处理的,是在程序编译时出现的错误,只能通过修改程序才能修正。一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢等。对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和和预防,遇到这样的错误,建议让程序终止。
Exception(异常)表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常。
throw与throws区别
throw:指的是在方法中人为抛出一个异常对象(这个异常对象可能是自己实例化或者抛出已存在的);
throw ThrowableInstance;
throws:在方法的声明上使用,表示此方法在调用时必须处理异常。
throw new NullPointerException("demo");
Java异常层次结构图(网上获取)