类和对象

  • 类:主观抽象,是对象的模板,可以实例化对象

  习惯上类的定义格式:

package xxx;
import xxx;
public class Xxxx
{
属性 ······; 构造器 ······; 方法 ······;
}

定义属性:实例变量

  1. 格式:[ 修饰符 ] 类型 变量名 [ = ? ]
  2. 实例变量定义在类中但在任何方法之外。
  3. 实例变量有默认值:各种各样的0。(同数组)
  4. 实例变量的作用域至少在本类内部,受访问控制符的限制。
  5. 在重合作用域,实例变量和局部变量允许有命名冲突,“局部优先”。

定义方法:

  • 格式: [ 修饰符 ] 返回类型 方法名( 参数列表 ) [ throws 异常 ] { ······ }
  1. java中所有参数都是值传递。
  2. 当没有值返回时,返回类型必须被定义为void。
  3. 返回类型必须与方法名相邻,其他修饰符可以调换位置。

构造器:

  1. 在创建对象的过程中调用的方法。
  2. 构造器没有返回类型。
  3. 构造器的名字与类名相同。
  4. 格式为:[ 修饰符 ] 类名( 参数列表 ){ },修饰符可以是private、 protected、 default、private

  在一个对象的生成周期中构造器只用一次,由系统自动调用,不允许手工调用。
  程序员没有提供一个构造器,系统会自动提供一个无参的构造器。

获得对象的方式:

  • 通过new(在堆空间中申请分配空间),new 类名(),可以通过这种形式或的一个对象,这时的对象是无法使用,必须把他的地址存放进一个对象变量才能够使用。

  例如 :

Car c=new Car();

  注意:

  • 最好在写类时提供一个无参的构造器。

this关键字:

  • this是个隐式参数,代表当前对象;
publie class Student
{
private String name;
public void setName(String name)
{
this.name=name; //this.name为当前对象的成员变量
}
}

  如果某个构造方法的第一个语句具有形式this( ··· ),那么这个构造方法将调用同一类中的其他构造方法。

注意:

  1. 在构造器中this(...)必须放在该构造器的第一行。
  2. this不能出现在静态方法里面

类、对象、实例三者的关系:

  1. 类:是对象的模板,可以实例化对象
  2. 对象:类的个体
  3. 实例:实现的对象
student s;
s=new student();

  其中 Student为类,s为对象,new Student()为实例,s赋值后也是实例了。


方法重载:

  1. 方法名相同,参数表不同,不考虑返回值类型(但最好还是使返回类型一致)。
  2. 编译器根据参数,选择一个方法,如果没有完全匹配的,对于参数表采用“向上就近匹配原则”,但不允许模棱两可。
  3. 方法重载屏蔽了一个对象的同一类方法由于参数不同所造成的差异。

封装:

  1. 类的属性加private修饰符,来限制只能够在类的内部进行访问,有效的保护数据。
  2. 对于类中的私有属性,要对其给出一对方法getXxx(),setXxx()访问私有属性,保证对私有属性的操作的安全性。
  3. 方法公开的是方法的声明,即只须知道参数和返回值就可以调用该方法,隐藏方法的实现的细节。
  4. 一个对象和外界的联系应当通过一个统一的接口,应当公开的公开,应当隐藏的隐藏。

继承:

  1. 父类到子类是从一般到特殊的关系。
  2. 泛化:将不同子类中的共性抽象成父类的过程。
  3. 特化:在原有父类的基础上加入一些个性的过程。
  4. 原则:父类放共性,子类放个性。
  5. 继承的关键字:extends
  6. Java只支持单继承:一个类最多只有一个直接的父类。

方法覆盖:

  1. 方法名:相同
  2. 参数表:相同
  3. 访问限制符:相同或者更宽
  4. 返回值类型:相同或者子类返回的类型是父类返回的类型的子类(在JDK5.0以后)
  5. 抛出的异常:不能比父类更宽。

super关键字:

  1. super()表示调用父类的构造器
  2. super()也和this()一样必须放在方法的第一句
  3. super()和this()不能同时出现
  4. super可以屏蔽子类属性和父类属性重名时带来的属性遮盖,super. 表示调用父类的方法或属性
  5. 在子类的构造器中如果没有指定调用父类的哪一个构造器,那么就会调用父类的无参构造器,即super()

注意:

  1. 父类的构造器不能被子类继承
  2. 方法和属性可以被继承,权限不限制能否继承过来,限制的是能否直接访问
  3. 先构造父类,后构造子类,先this后super

多态:

  1. 多态分为两种:编译时多态和运行时多态。
  2. 编译时类型:主观概念,把它看作什么。
  3. 运行时类型:客观概念,实际它是什么。

  例:Animal a=new Dog();

  指着狗问,这个动物是什么?

运行时多态的三原则:

  1. 对象类型不变。
  2. 只能对对象调用编译时类型中定义的方法。
  3. 在程序的运行时,根据对象的运行时类型,找覆盖后的方法来调用。(运行时动态类型绑定)

强制类型转换:

  1. 一定没有新对象生成。(父类的引用赋值给子类的引用需要进行强制类型转换)
  2. 关键字:instanceof
  3. 用法:引用 instanceof 类名 判断这个引用所指向的对象是否属于这个类。
  4. 用在强制转换之前,避免类型转换异常。
if(a instanceof Dog)
{
Dog d=(Dog)a;
}

多态的作用:

  • 把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。

修饰符static

  1. 把对象相关的变成类相关的,它可以修饰属性、方法、代码块和内部类
  2. static修饰属性(类变量):
  3. 那么这个属性就可以用" 类名.属性名 "来访问,也就是使这个属性成为本类的类变量,为本类对象所共享。
  4. 类加载的过程,类本身也是保存在文件中(字节码文件保存着类的信息)的,java会通过I/O流把类的文件读入JVM(java虚拟机),这个过程称为类的加载。JVM会通过类路径(CLASSPATH)来找字节码文件。需要的时候才会进行类加载,生成对象时是先加载后构造
  5. 类变量,会在加载时自动初始化,初始化规则和实例变量相同。

注意:

  1. 类中的实例变量是在创建对象时被初始化的
  2. static修饰的属性,是在类加载时被创建并进行初始化,类加载的过程只进行一次,也就是类变量只会被创建一次。

static修饰方法(静态方法):

  1. 会使这个方法成为整个类所公有的方法,可以用" 类名.方法名 "访问。
  2. static修饰的方法,不能直接访问本类中的非静态成员,但本类的非静态方法可以访问本类的静态成员。
  3. 在静态方法中不能出现this关键字。
  4. 父类中是静态方法,子类中不能覆盖为非静态方法,在符合覆盖规则的前提下,在父子类中,父类中的静态方法可以被子类中的静态方法覆盖,但是没有多态。(在使用对象调用静态方法时其实是调用编译时类型的静态方法)
  5. java中的main方法必须写成static的原因:在类加载时无法创建对象,而静态方法可以不通过对象调用,所以在类加载时就可以通过main方法入口来运行程序。

static修饰初始代码块:

  1. 这时这个初始代码块就叫做静态初始代码块,这个代码块只在类加载时被执行一次。
  2. 可以用静态初始代码块初始化一个类。
  3. 动态初始代码块,写在类体中的“{}”,这个代码块是在生成对象时运行,这种代码块叫动态初始代码块。

单例设计模式:

  1. 一个类只允许有一个对象,保证所有引用的对象都是同一个对象。
  2. 因为只允许存在一个对象,则不允许在外面直接new出新的对象,所以应该把构造器设为private,。
  3. 在类内定义一个公开的静态方法,让使用者进行调用,通过该方法去获得一个实例。

  例:

public calss Singleton
{
private static Singleton s;
private Singleton(){}
public static Singleton newInstance()
{
if ( s == null)
s = new Singleton();
return s;
}
}

修饰符final

  • 不允许改变,可以修饰变量、方法、类

final修饰变量:

  1. 被fianl修饰的变量就会变成常量,一旦赋值不能改变
  2. 常量可以在初始化时直接赋值,也可以在构造方法里赋值,只能在这两种方法里二选一,不能不为常量赋值
  3. 常量不会有默认初始值
  4. 锁定栈,使栈中的数据不可以改变
  5. 静态常量只能在初始化时直接赋值

final修饰方法:

  • 被final修饰的方法将不能被其子类覆盖,保持方法的稳定不能被覆盖

final修饰类:

  1. 被final修饰的类将不能被继承
  2. final类中的方法也都是final的

注意:

  • final不能用来修饰构造方法

访问权限控制

private:

  1. 本类内部可以访问
  2. 不能继承到子类
  3. default:
  • 本类内部可以访问,同包其他类也可以访问。
  • 同包可继承

protected:

  1. 本类内部可以访问,不同包的子类也可以访问,同包其他类也可以访问。
  2. 能继承到子类

public:

  1. 任何地方都可以访问
  2. 能继承到子类

【Java】Java复习笔记-第二部分的更多相关文章

  1. Java基础复习笔记系列 八 多线程编程

    Java基础复习笔记系列之 多线程编程 参考地址: http://blog.csdn.net/xuweilinjijis/article/details/8878649 今天的故事,让我们从上面这个图 ...

  2. Java基础复习笔记基本排序算法

    Java基础复习笔记基本排序算法 1. 排序 排序是一个历来都是很多算法家热衷的领域,到现在还有很多数学家兼计算机专家还在研究.而排序是计算机程序开发中常用的一种操作.为何需要排序呢.我们在所有的系统 ...

  3. Java基础复习笔记系列 九 网络编程

    Java基础复习笔记系列之 网络编程 学习资料参考: 1.http://www.icoolxue.com/ 2. 1.网络编程的基础概念. TCP/IP协议:Socket编程:IP地址. 中国和美国之 ...

  4. Java基础复习笔记系列 七 IO操作

    Java基础复习笔记系列之 IO操作 我们说的出入,都是站在程序的角度来说的.FileInputStream是读入数据.?????? 1.流是什么东西? 这章的理解的关键是:形象思维.一个管道插入了一 ...

  5. Java基础复习笔记系列 五 常用类

    Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...

  6. Java基础复习笔记系列 四 数组

    Java基础复习笔记系列之 数组 1.数组初步介绍? Java中的数组是引用类型,不可以直接分配在栈上.不同于C(在Java中,除了基础数据类型外,所有的类型都是引用类型.) Java中的数组在申明时 ...

  7. 《深入理解Java虚拟机》笔记--第二章、Java内存区域与内存溢出异常

    Java程序员把内存的控制权交给了Java虚拟机.在Java虚拟机内存管理机制的帮助下,程序员不再需要为每一个new操作写对应的delete/free代码,而且不容易出现内存泄露和溢出. 虚拟机在执行 ...

  8. java程序设计基础篇 复习笔记 第二单元

    1原始数据类型(primitive data type) == 基本类型 (fundamental type)byte short int long float double char boolean ...

  9. Java基础复习笔记系列 三

    前几节都是基础中的基础,从第三讲的笔记开始,每次笔记针对Java的一个知识块儿.  Java异常处理 1.什么是异常? 异常是指运行期出的错误.比如说:除以一个0:数组越界:读取的文件不存在. 异常处 ...

  10. Java基础复习笔记系列 二

    1.Java中Static的相关用法总结?(静态方法:静态变量:静态代码块) public static void main(String args[])执行的关键,在于有static.有了stati ...

随机推荐

  1. dx11的一些数据结构

    功能是什么创建一个设备(device)来代表显示适配器(display adapter)并且创建一个交换链(swap chain)用于渲染 设备device在dx11里是用来干什么的从ID3DX11D ...

  2. 手动搭建latex公式渲染服务器

    latex公式渲染有两种类型,一种是HTML形式展示公式,另一种是图片形式展示公式.如果是HTML形式展示公式,渲染是在前端完成的,一般会比较缓慢.知乎采取的方式是以图片形式展示公式.codecogs ...

  3. Java多线程编程:Callable、Future和FutureTask浅析

    通过前面几篇的学习,我们知道创建线程的方式有两种,一种是实现Runnable接口,另一种是继承Thread,但是这两种方式都有个缺点,那就是在任务执行完成之后无法获取返回结果,那如果我们想要获取返回结 ...

  4. 树莓派进阶之路 (024) - windows远程桌面连接树莓派通过xrdp服务(转)

    本文转载:http://www.cnblogs.com/edgexie/p/6527992.html 在网上看到很多关于windows远程桌面连接树莓派的教程.我也按照教程试过了,遇到了几个坑.特意记 ...

  5. jstree中文github文档

    jstree Bala...bala...这段就不翻译了. jstree就是个基于JQUERY的树形控件. 1 2 jsTree is jquery plugin, that provides int ...

  6. 【Algorithm】自底向上的归并排序

    一. 算法描述 自底向上的归并排序:归并排序主要是完成将若干个有序子序列合并成一个完整的有序子序列:自底向上的排序是归并排序的一种实现方式,将一个无序的N长数组切个成N个有序子序列,然后再两两合并,然 ...

  7. nginx+php-fpm性能参数优化原则

    1.worker_processes 越大越好(一定数量后性能增加不明显)   2.worker_cpu_affinity 所有cpu平分worker_processes 要比每个worker_pro ...

  8. Spring JavaConfig

    以前,Spring推荐使用XML的方式来定义Bean及Bean之间的装配规则,但是在Spring3.0之后,Spring提出的强大的JavaConfig这种类型安全的Bean装配方式,它基于Java代 ...

  9. flock防止crontab脚本周期内未执行完重复执行(转)

    如果某脚本要运行30分钟,可以在Crontab里把脚本间隔设为至少一小时来避免冲突.而比较糟的情况是可能该脚本在执行周期内没有完成,接着第二个脚本又开始运行了.如何确保只有一个脚本实例运行呢?一个好用 ...

  10. 支付接口中常用的加密解密以及验签rsa,md5,sha

    一.常用加密类型分类 1.对称加密:采用单钥对信息进行加密和解密,即同一个秘钥既可以对信息进行加密,也可以进行解密.此类型称之为对称加密.特点速度快,常用于对大量数据信息或文件加密时使用.常用例子:D ...