java基础之单例设计与继承

来源:互联网 发布:淘宝买精密管警察找我 编辑:程序博客网 时间:2024/06/06 01:36
   4.方法的参数传递
基本数据类型 值传递:当参数类型为基本数据类型的时候 传递的是值 出了方法 原有值不变
引用数据类型 引用传递:当参数类型为引用数据类型的时候 传的是堆内存中的地址 可以改变内存中的地址对应的数据
   5.static关键字
static 静态


static 特点
1.节省资源 可以吧共性的东西抽取出来设置为静态 共用
2.被静态修饰的成员 优先于对象加载入内存 随着类的加载而存在
3.当成员被静态修饰后 可以用 类名.静态成员 调用
可以用对象调用 但是不推荐


注意:
静态虽好 不可乱用


与类相关 与对象无关

修饰成员变量
所属不同
静态的成员变量
属于类 所以也叫类变量
非静态的成员变量
属于对象 所以也叫 实例变量
内存中的位置不同
静态的成员变量
存储于方法区的静态区
非静态的成员变量
堆内存
内存中出现的时间不同
静态的成员变量 随着类的加载而加载 随着类的消失而消失 存活时间长
非静态成员变量 随着对象的存在而存在 随着对象的消失而消失
调用不同
静态 类名.调用/对象.调用(不推荐)
非静态 对象.调用
修饰成员方法
语法:
访问权限修饰符 static 返回值类型 方法名(形参)
{
//方法体
}
注意事项:
1.静态方法 只能访问静态成员
 非静态方法既可以访问静态 也可以访问非静态
2.静态方法中不可以定义this/super关键字
 因为静态优先于对象存在 所以静态方法中不可以存在非静态的this/super成员
静态只能访问静态
总结:
静态有利弊 使用需谨慎
利:将对象共享的数据进行单独存储 节省空间 可以直接使用类名调用
弊:生命周期过长 静态方法中不可以调用非静态成员
public static void main (String[] args)
{
}
1.public 访问权限修饰符 (访问全南县最大修饰符)
2.static 静态的 随着类的加载 进入内存
3.void 不确定的范围值 当前JVM不需要这个方法带回返回值
4.main 不是关键字 JVM识别这个方法名 程序的入口
5.String[]:存放String类型数据的数组 可以接受键盘录入
6.args 数组名 不是关键字 arguments(参数)


   6.工具类
什么叫工具类:
将某些共性的功能抽取出来 单独封装成Java类 这样提高了复用性
类 ArrayTool
1.获取最大值
2.数组的遍历
工具类:
私有化构造函数 因为不需要再其他类中创建对象
将所有方法用static修饰 可以 类名.调用
好处:
可以重复使用
javadoc ArrayTool.java 可以生成Java文档API


   静态代码块
语法:
static
{
//块体 静态代码块里的执行语句
}
随着类的加载 只执行一次
并优先于主函数 没名字的比有名字的快
作用:
用于给类初始化的
一般用于加载驱动
   构造代码块:
{
//给对象初始化
}
   7.Math类中的生成伪静态随机数方法
Math类是在java.lang包中的 不用导包
static double random()
返回带正号的double值 该值大于0.0小于1.0
double b=newMath.random();
Math.random()--->0.00000 - 0.999999
(int)Math.random()*10--->0 - 9
   8.单例设计模式
设计模式:解决一件事最快的方式 最行之有效的方法
java中有23种设计模式
设计模式 是纯理论 纯思想 不是代码层面的
   
   单例:
配置文件 只需要一个配置文件就可以了


想要保证唯一性?
1.为了避免其他程序过多建立该类对象 先禁止其他程序建立该类对象
2.为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象
3.为了方便其他程序对自定义对象的访问 可以对外提供一些访问方式
这三部怎么用代码实现
1.将构造函数私有化
2.在本类中创建一个本类对象
3.提供一个方法可以获取该类对象
饿汉式:先初始化对象
private static Single s = new Single();
public static Single getSingle()
{
return s;
}
懒汉式:对象是方法被调用时 才初始化 也叫延时加载
private static Single s = null;
public static Single getSingle()
{
if(s==null)
{
s=new Single();
}
return s;
}


   面向对象特征二


继承
父子继承
让类与类之间产生关系 子父关系
格式:
class 子类名 extends 父类名
{
}
发现两个事物描述完之后 有一些共性的东西
就将两个类共性的东西警醒抽取 定义在另一个类中 然后让这两个类和他发生一些关系
extends 是继承的意思
Animal 父类
Cat/Dog 子类


继承的好处:
1.提高了代码的复用性 少写了代码 
2.让类与类之间产生了关系 有了这个关系 才有了多态 是多态的前提


is...a
先有父 才有子


类与类之间有共性的关系 抽取出来的是父类
子类继承了父类 必须有关系
继承弊端:
1.类的耦合性增强了
开发的原则:高内聚低耦合
内聚:就是自己完成某件事的能力
耦合:类与类的关系
java中的继承的特点:
1.只能单继承 不支持多继承
一个儿子只能有一个爹 一个爹可以有多个儿子
2.java支持多层继承
A继承B,B继承C
   查阅API文档


如何使用一个继承体系中的功能?
1.想要使用体系 先查阅父类的功能 因为父类中定义的是该体系中共性的功能
 通过了解共性功能 你就能知道该体系的基本功能 那么这个体系基本已经可用了


2.在具体调用时 要创建子类的对象 为什么?
1.有可能父类不能创建对象
2.创建子类对象 可以使用更多的功能 包括基本功能和特有的功能
简单地一句话:
查阅父类功能 创建子类对象使用功能(实际开发中)
   继承中成员之间的关系
继承中成员变量的关系
如果想要调用成员变量
同名
就近原则 this
调用父类 super.成员变量
不同名
直接用 或者 this/super 都可以
this:表示本类对象的引用
super:表示父类对象的引用


继承中成员方法的关系
同名:
就近原则
不同名:
直接调用
方法的重写:
子父类出现了一模一样的方法(代码块不一样)
重写有什么用:
提高了代码的扩展性
当子类需要父类的功能 而功能主体是子类特有的内容时 可以重写父类中的功能
这样 既沿袭了父类的功能 又定义了子类特有的功能
注意事项:
1.父类私有方法 子类不能重写
2.子类重写父类方法时 访问权限不能更低(大于等于) 否则编译失败
//private <默认<public
权限越来越小 那么继承体系就崩溃了
重写:一模一样


继承中构造方法的关系


没有父就没有子 在创建子类对象时 先加载父类对象 再加载子类对象
原创粉丝点击