您的位置:首页 > 移动开发 > Android开发

Java4Android学习笔记

2015-03-08 20:29 134 查看
static

静态成员变量 可以直接通过类在调用,不用通过对象名来调用,可以而不是必须。

我的理解就是该类的所有对象都只想同一个静态成员变量,也就是说修改了一下就修改了所有的值。

不是对象层次的变量,而是类层次的变量,只要类被改了,所有对象中的值都会被修改。

静态成员函数 静态函数也是可以通过类名来调用的,无需生成对象就可以直接调用。

不能直接使用非静态的变量。

不能使用this。

静态代码块 在装载的时候执行,作用就是为静态变量赋初始值,在实际应用少,记住这个语法就可以了。

继承初步

定义:就是一个类得到了另一个类当中的成员变量和方法。

Java只支持单继承,不允许多继承。一个类只能拥有一个父类,但是一个父类可以拥有多个子类。

使用继承消除重复代码,把几个类的共同部分放在一个类里面,然后在子类里面去继承。

用关键字extend,其实是扩展的意思,在继承后扩展自己的东西。

子类实例化过程

生成子类的过程。

使用super调用父类构造函数的方法。

父类的构造函数不能被继承,只能继承成员和方法。

在子类的构造函数中,必须调用父类的构造函数,如果不写的,编译器会自动加上super()这行代码,调用父类的无参数构造函数,具体调用那个构造函数,要根据子类的构造函数的参数来确定。

具体调用那个父类的构造函数,要根据super后面的参数的个数和类型来确定。

为什么这样做呢?还是为了消除重复代码。

函数的复写 override

使用super调用父类的成员函数

对父类函数的修改就是复写。

super和this的语法非常类似。

复写的语法特征,也被称之为覆盖或者重写:在具有父子关系的两个类当中,父类和子类各有一个函数,这个

两个函数的定义,包括返回值类型,函数名和参数列表相同,满足这个关系则这两个函数的关系为复写。

super.父类的方法,调用父类的成员函数(方法)。

对象的转型

向上转型:将子类的对象赋值给父类的引用。

一个引用能调用哪些成员(变量和函数),取决于这个引用的类型。

一个引用能低矮用哪一个方法,取决于这个引用所指的对象。调用的是子类的成员函数,在父类和子类有复写关系的

时候尤其要注意。

先记住语法,怎么用的话后面在介绍,学习的过程通常都是这样,不知道什么用而学不会是一种借口。

只要是继承关系,那么向上转型是一定会成功的。

向下转型:前提就是想上转型,先向上转型,然后再转回来。

具体有什么用暂时不知道,等以后要用了再补充。

直接生成的父类的对象是不能直接转为子类的类型的。

面向对象应用(一)

继承在实际开发中的应用,先写出怎么写出一个正确的程序,其他的才是怎么去优化。

被客户不断变化的需求所“折磨”。

我做了这么多年的开发,还没有遇到多需求不变的客户。

客户的第一次需求。

客户的第二次需求。

第一条,客户永远是对的,第二条,客户如果错了,请参照第一条。

看到重复代码就全身不舒服,就像有人在你脸上吐了一口唾沫。

抽象类和抽象函数

先抽象再具体

抽象函数:只有函数的定义,没有函数体,比如abstract void fun();

如果一个类中拥有抽象函数,则这个类也必须是抽象类。

抽象类:使用abstract定义的类。

抽象类不能够生成对象。(类是抽象的,无法对其进行实例化)

如果一个类中没有抽象函数,这个类也可以被声明为抽象类。

抽象天生就是来当爹的,就是用来被继承的,自己不能生成对象,但是它的子类可以生成对象。

抽象类里面可以有构造函数,抽象类的子类可以通过super来调用抽象类的构造函数。

抽象类的构造函数是为子类准备的。

为什么用抽象类

可以防止忘了复写override。

现在编程理论认为:如果一段代码在语意上是有错误的,那么在语法也应该是有错误的。

最好是一个错误能引出另外一个错误,这样就可以很方便地发现错误和检查错误。

在语意上有错误,最好也让它在语法上错误,语法的错误更容易被检查出来。

包和访问权限(一)

所谓的软件包就是把类放在不同的文件夹下,包=文件夹。

将类放置在一个包中,需要使用package "包名"。

编译时需要使用-d 参数,该参数的意思是依照包名生成文件夹。

一个类的全名应该是"包名"+"."+"类名"。

包名的命名规范:要求包名所有的字母都要小写、包名一般情况下是你的域名倒过来写。

软件包为Java类提供了命名空间,在不同的空间下(文件夹)的类可以重名。

包和访问权限(二)

访问权限:

public 公共权限

private 私有权限

default 包级别权限

protected 保护权限

public 相当于没有任何限制,类名和文件名必须一致,在公共权限下 public class person{}。

两个类如果在不同的包中,如果一个类要访问另一个类的话,就要将另一个类声明为public,如果要访问另一个类

的成员变量和方法,也要求这个成员变量和方法也声明为public。

private 能修饰变量也能修饰函数,如果一个变量和函数,则只能在类中使用,外部无法使用。

default 什么都不写就是这个权限,使用这个权限时,如果两个类在同一个包则可以任意使用,之前做的实验都是

这个权限。也叫做包级别访问权限。

类的导入,import,将包导入之后就可以直接使用类了,而不用再类名加很长的前缀。

包和访问权限(三)

访问权限和继承的关系

如果子类和父类不在同一个包中,则子类无法继承到父类中的default权限的变量和函数,有继承到只不过是无法访问。

如果变量和函数被声明为private,即使父类和子类在同一个包中,也是无法访问父类的变量和函数。

protected,首先拥有和default一样的功能,protected只能修饰成员变量和函数,不能修饰类。

声明为保护,则在其他包中的子类可以访问父类的变量和函数,而public则是什么都可以访问。

总结:public > protected > default > private 开发原则:权限越小越好。

接口的基本语法

接口的使用方法真正体现了面向对象的精髓所在。

什么是接口?

使用interface定义;接口当中的方法都是抽象方法;接口当中的方法都是public权限。

implements实现,实现是特殊的继承。

一个类可以实现多个接口,向上转型的时候就有多个父类可以转型。

一个接口可以继承多个接口。

接口的应用

为什么要使用接口?

就是在接口类中写出很多子类需要用的抽象函数,但是各个函数的具体实现不一样,所以在子类中必须对这些抽象函数

进行复写。暂时我的理解是这样的,如果真是这样的话,那就跟抽象类的差别不是很大了。

面向对象的终极目标是要减少重复代码。

工厂方法模式:思路就是把生成对象的方法封装在一个类中,把需要重复使用的东西进行封装,在以后

需要修改的时候只需要修改一个地方就够了。

Java中的异常(一)

定义,不正常的现象,中断了正常指令流的事件,由虚拟机生成。

IO流就是访问硬盘中的一些文件。

异常是在运行的时候才出现的,跟编译没有关系,编译错误是语法错误,也就是说异常在语法上是正确。比如说

1/0,可以正常编译,语法没有问题,但是不能正常运行。

异常是有JDK所提供的类,虚拟机会生成异常对象,既然有对象就会有对应的类。

异常的分类。

check exception编译器认为会产生产生异常,则编译器会强制要求你对程序进行修改。

uncheck exception

try{有可能会出现异常的代码} catch{如果出现异常会跳到这里执行} finally

这样的机制能保证即使有异常,程序会跳过异常使得后面的代码可以继续运行,如果没有try catch则程序在异常处就停掉了。

finally(有没有异常都会执行,所以也被称为异常的出口)问题来了,如果都会执行的话那么把代码放在后面就好了

反正后面的也都会执行。

总结:程序员对error无能为力,只能处理exception

对异常的处理关系到系统的鲁棒性

Java中的异常(二)

自定义异常

throw和throws的用法:有异常的时候跑出异常,终止程序的运行。

Java当中的IO(一)

Java中的输入输出系统

输入:有数据进入到程序。输出:从程序到其他设备。

分类:输入流和输出流、字节流和字符流、节点流和处理流。

在Java的世界里面所有的东西都是对象,所以输入流和输出流也都是对象,必须用对象来表示。

read方法和write方法。主要是里面的三个参数和read的返回值。

Java当中的IO(二)

大文件的读写方法。

利用循环,当文件读完的时候,read的返回值为-1,利用这个条件设置循环条件。

关闭IO流的操作:分别调用两个输入和输入两个对象的方法,fis.close和fos.close,这两个方法适合放在finally里面。

关闭IO流的时候可能会产生异常,所以完整的代码是finally{try{fis.close;fos.close}catch{}}

字符流:读写文件时,以字符为基础。

字符输入流:Reader<--FileReader 方法:int read(char[]c,int off,int len)

字符输出流:Write<--FileWrite 方法:void Write(char[]c,int off ,int len)

节点流和处理流。

装饰者模式,还不是很理解,日后需要用到的时候再回来看。

匿名类和匿名内部类

究竟怎么使用,在后面的内容在介绍,这一期只介绍语法。

内部类,一个类定义在另一个类的里面。

编译出来的结果是 外部类$内部类.class。

如何生成内部类的对象。

内部类和继承不一样,内部类可以随意使用外部类的成员,每一个内部类对象都和一个外部类对象所关联。

匿名内部类 感觉还是有点复杂,不知道什么意思,我看还是先放着吧!

Java中的线程

多线程:同一个程序中有多个指令流。

多线程最大的特点就是没谱,跟CPU和操作系统有关,所以多线程程序难以测试,因为出错的问题可能跟执行的顺序有关。

java中的数组

数组的静态定义法 int arr[]和int []arr两种形式都可以,看你工作的团队大家的约定,要嘛都

前面,要嘛都后面

数组的动态定义方法 int arr[] = new int[10] 创建一个可以长度为10的整型数组,如果没有初始化,

默认值为 0

二维数组的定义方法 静态定义int arr[][] 动态定义 int arr[] = new int[2][2]

类集框架

类集框架是一组类和接口,位于java.util包当中,主要用于存储和管理对象,主要分为三大类集合、列表和映射

重要ArrayList类,它的对象的长度是可变的,无限长的。

Eclipse(一)

是一个平台,可以在上面安装各种各样的插件,这是Eclipse的重要特点,重要和流行的原因。

工作区:目录。

Eclipse(二)

创建项目

目录结构

编译和运行

错误提示

驼峰命名法

final的类是不能被继承的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: