Java基础语法(详细基础原理)

Java基础语法(详细基础原理)

第五章 继承、接口和抽象类

1、继承

将共同点提取出来,即形成了父类/基类/超类。

其他类自动成为子类/派生类

子类继承父类的所有属性和方法,但不能直接访问private成员。(可以通过父类的方法去访问private成员)

如果不写extends,java中默认继承java.lang.Object类

单根继承原则:每个类只能继承一个类。

注意:每个子类的构造函数的第一句话,都会默认调用父类的无参数构造函数super()

相同点继承,不同点保留形成子类:
在这里插入图片描述

子类调用父类方法去访问父类的private成员:

在这里插入图片描述

2、抽象类

完整的类:所有的方法都有实现(方法体)

抽象类也是类

注:只有一个完整的类才能被实例化,被new出来

若一个类中有方法未被实现,则被定义为抽象类。

在这里插入图片描述

​ 抽象类关键字abstract声明,抽象类中的未被实现的函数也同样需要通过abstract来声明。

​ 子类如果继承于抽象类,那么一定要实现父类所有的abstract的方法,否则子类也应该声明为抽象类。

在这里插入图片描述

3、接口

​ 如果一个类中所有的方法都没有实现,那么这个类就可以称作为一个接口(interface)

​ interface 不算类,或者说也是一种特殊的类。

类只能继承(extends)一个类,但是可以实现(implements)多个接口,继承和实现可以同时进行。

一个接口可以继承多个接口,没有实现的方法将会叠加。

一个类如果要实现接口,那么就要实现所有未被实现的方法。如果没有全部实现,那么只能成为一个抽象类。

在这里插入图片描述

​ 接口interface的定义过程中,class 是多余的。接口的定义是

public interface  CatFamily extends Animal,ClimbTree public interface Cat 


接口的实现(implements)
在这里插入图片描述

一个类继承一个抽象类(LandAnimal)和实现一个接口(interface):
在这里插入图片描述

一个类实现一个接口(CatFamily),该接口是继承了两个接口(Animal,ClimbTree):

在这里插入图片描述

4、总结

抽象类和接口的比较:

----相同点:

两者都不能被实例化,不能new操作;

----不同点:

抽象类可以有部分方法实现,接口所有方法都没有实现。

一个类只能继承(extends)一个(抽象)类,但一个类可以实现(implements)多个接口。

一个接口也可以继承(extends)多个接口。

抽象类有构造函数,接口没有构造函数。

抽象类可以有main,也能运行,接口没有main函数。

5、类转型

子类可以转换成父类(向上转型可以),而父类不能转换为子类(除非该父类对象本身就是一个子类对象)

Human obj1 = new Man();  (正确)
Man obj2 = new Human();  (错误)
6、多态

类型转换带来的作用就是多态。

子类继承父类的所有方法,但子类可以对父类的方法进行重写,即一个方法可以替换父类的一个方法。(注:子类方法的优先级是高于父类的

作用

以统一的接口操作某一个类中不同对象的动态行为。

对象之间的解耦

在这里插入图片描述

7、契约设计

契约:规定规范了对象应该包含的行为方法。

接口定义了方法的名称、参数和返回值,规范了派生类的行为。

基于接口,利用转型和多态,不影响真正方法的调用,成功将调用类和被调用类解耦。

第六章、static、final和常量设计

1、static

静态变量,类共有成员,所有的对象实例只有一个静态变量的拷贝

static可以依赖于类存在,是类中的一个独立的存在

可以通过类直接访问,如下的Potato.price

在这里插入图片描述

静态方法可以调用静态变量。

静态方法不能调用非静态变量。

静态方法不能调用非静态方法。

非静态方法可以调用静态方法。

非静态方法可以调用静态变量。

非静态方法可以调用非静态变量。

在这里插入图片描述

static块/静态代码块

只在类第一次被加载时调用,即这段代码只执行一次。

优先级顺序:static块>匿名块>构造函数

2、单例模式

又称为单态模式Singleton,即内存空间中一个类只有一个对象存在

----采用static来共享对象实例

----使用private构造函数,防止外界new操作

3、final

final类:没有子类继承。

final字段:不能被子类改写。

final字段:基本类型不能修改值,对象类型不能修改指针。

final的类,不能被继承

子类中不能修改父类final的方法。

final的变量不能被再次赋值如果是基本类型,则不能修改其值。如果是指针类型,则地址不能修改,内容可以修改。

4、常量设计

----不能修改:final(相当于是const)

----不会修改/只读/只要一份:static

----方便访问:public

接口中定义的变量默认为常量(public static final)

建议常量名字全部大写,中间用连字符连接

常量池:相同的值只存储一份,共享访问。

常见的常量池:

----BYTE:-128~127

----Character:0~127

----Boolean:true,false

----Short,Int,Long:-128~127

Java为常量字符串都建立常量池缓存机制

5、不可变对象和字符串

一旦创建,这个对象不能被更改了

其内在的成员变量的值就不能修改了。

如何创建不可变对象(Immutable Object):
----所有的属性都是final和private的

----不提供set方法,不能去修改

----类是final的,或者所有的方法都是final的

Java字符串:

String定义:

-----String a=“abc”; //常量赋值,栈分配内存

-----String b=new String(“abc”); //new赋值,堆分配内存

字符串内容比较:equals方法

是否指向同一个对象:指针比较==

字符串加法操作:SrinagBuffer,StringBuilder


第七章、package、import、classpath

1、package和import

—包名:package name尽量唯一

—域名是唯一的,因此常用域名作为包名

—package必须是第一行

—多个import的顺序无关

—可以用*来引用一个目录下的所有类

2、jar文件导出和导入

.java文件最终会被编译为.class文件(二进制),并发送到机器上使用

jar文件实际上是一组class文件的压缩包,用于可执行文件的传播。(本质上类似于C++中的DLL文件)

jar文件只包括class,而不包括java文件,可以有效保护源文件。

第八章、java常用类

1、java的String类

a.charAt(0)//返回第0个元素。

a.indexOf(“;”)//返回第一个;的位置。

a.concat(“;000”) //连接一个新字符串并返回。而本身值不变。

a.contains(“000”) //判断a是否包含000

a.endsWith(“000”) //判断a是否以000结尾

a.equals(“000”) //判断a是否等于000

a.equalsIngoreCase(“000”) //在忽略大小写的情况下比较是否相同

a.length() //返回a的长度

a.trim() //返回a去除前后空格的字符串,a不变

String[] b=a.split(“;”) //将a字符串按照;分割成数组

a.substring(2,5) //截取第二个到第五个的字符,a本身不变

a.replace(“1”.”a”) //把所有的1都变成a

2、StringBuffer和StringBuilder

两个类都是可变对象,变量是原地就修改了

public class StringBUfferReferenceTest{
    public static void main(String[] args){
        StringBuffer sb1=new StringBuffer("123");
        StringBuffer sb2=sb1;
        
        sb1.append("1234567890");
        System.out.println(sb2);    //sb1和sb2指向的内存是一样的,因此改变sb1的值,sb2的值也相应发生变换
}
}
2、时间类

–getTime(),返回来自1970.1.1以来的毫秒数

java.sql.Date(和数据库对应的时间类)

Calendar是目前最常用的,但是是抽象类(不可以new出这个对象)

一般采用 Calendar gc=Calendar.getInstance();—实质上是简单工厂模式 ,获取到Calendar的一个对象

与Calendar gc=new GregorianCalendar();是等价的

Calendarl类中主要的函数

getField()函数,可以用来获取时间中每一个属性的值。注意:月份是0-11

eg: calendar.get(Calendar.YEAR)

​ calendar.get(Calendar.MONTH)+1

​ calendar.get(Calendar.DAY_OF_MONTH);

​ calendar.get(Calendar.HOUR)

​ calendar.get(Calendar.HOUR_OF_DAY);//24小时表示

getTime(),是返回相应的date对象

getTimeInMills(),返回自1970.1.1以来的毫秒数

​ setField(),设置时间的字段

eg:

​ calendar.set(2018,7,8)

​ add(field,amount)根据指定字段增加减少时间

eg:

​ calendar.add(Calendar.YEAR,1); //年份加1年

java.time包

第九章、异常处理
1、try-catch-finally

一种保护代码正常运行的机制

异常结构:

-try…catch(catch可以有多个)

-try…catch…finally

-try…finally

try必须有,catch和finally必须有一个

catch: 当try发生异常,将执行catch代码。若无异常,则绕过。(自上向下排列)

finally:当try,catch执行结束后,必须要执行finally

catch块可以有多个,每个有不同的入口形参,当已发生的异常和某个catch块中的形参类型一致,那么将执行该catch块中的代码。如果没有一个匹配,那么catch块也不会被触发。最后都进入finally块。

进入一个catch块就不会进入第二个catch块。

因此,小异常写在前面。

throw:方法存在异常的语句,但是不处理,那么可以使用throws来声明。

class Test{
	public int divide(int x,int y)throws ArithmeticException{
		int result=x/y;		//因为我不去处理,因此这个地方可会有异常,那就直接向外抛出异常
        return x/y;
        
    }
} 
2、自定义异常

需要继承Exception类或者其子类

—继承自Exception,就变成了Checked Exception

第十章、java文件读写

1、文件概述

·文件系统是由OS管理的。

·文件系统和java进程是平行的,是两套系统。

·文件系统是由文件夹和文件递归组合而成。

·文件目录分隔符

–linux/Unix 用/隔开

–Windows用\隔开,涉及到转义,在程序中需用/或\代替

·文件包括文件里面的内容和文件基本属性

·文件基本属性:名称、大小、扩展名、修改时间等

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值