Java4Android学习笔记

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的类是不能被继承的

























 













你可能感兴趣的:(个人心得)