Java 4
1、继承的问题
子类是父类的一个扩展,子类可以利用父类的属性与行为,这种情况子类会破坏父类的封装
为了保持父类良好的封装性,设计父类有以下规则:


如果要把某类设计为最终类则需要添加final修饰符,或将此类的构造器声明为private
2、利用组合实现复用
组合就是把旧类的对象当做新类的属性嵌入,并用private修饰
public class Animals
{
public Animals()
{
System.out.println("Animals");
}
public void breathe()
{
System.out.println("ha-hu");
}
} public class Wolf
{
private Animals a;
public Wolf(Animals a)
{
this.a=a;
}
public void run()
{
System.out.println("run");
} public static void main(String[]args)
{
Animals b=new Animals();
Wolf a=new Wolf(b);
a.run();
}
}
3、初始化块
前面定义的初始化块先执行,后面的后执行
syntax:
[修饰符]{
//...
}
只能使用sattic修饰,称作静态初始化块
当创建一个对象是先调用初始化块
静态初始化块对整个类进行初始化
系统会首先执行静态初始化块,并会一直回溯到基类再一步一步执行静态初始化,再执行其他
4、基本数据类型的包装类

为什么要用包装类?
解决8个基本类型变量不能变成Object类型变量的问题,为8个基本类型变量定义了应用类型的包装类。

JDK1.5后提供了自动装箱与自动拆箱,就可以直接来了,不用这么复杂了
基本类型变量与字符串之间的转换关系

5、toString
toString 是Object 类定义的一个方法,用以描述对象的状态信息
返回值:对象类的实现类名+@+hashCode
可以依据实际情况重写toString
6、==与equals
==比较是一种基本类型的比较符,当要对引用类型进行比较时,比较的是是否指向同一个对象,不是值相等
要实现值相等的比较,就要重写equals
Object提供的equals与==是一样的,没有用的,一定要重写
重写后有规定:
1)自反性;
2)传递性;
3)对称性;
4)一致性。
Example:
public boolean equals(Object obj)
{
if(this==obj)
return true;
if(obj!=null&&obj.getClass()==SomeClass.class)
{
SomeClass sc=(SomeClass)obj;
if(compare)
return true;
}
return false;
}
7、类成员
类中只能包含属性、方法、构造器、初始化块、内部类、枚举类
static不修饰构造器
类成员不能访问实例成员
8、单例类Singleton
一个类只能创建一个实例
把构造器用private修饰
需要一个public方法作为这个类的访问点,同时要将其定义为static
该类还需缓存已创建的对象
class Singleton
{
//使用一个变量来缓存曾经创建的实例
private static Singleton instance;
//隐藏构造器
private Singleton(){}
//提供一个静态方法,用于返回Singleton实例
//可加入自定义的控制,保证只产生一个Singleton
public static Singleton getInstance()
{
if(instance==null)
{
instance=new Singleton();
}
return instance;
}
}
9、final
final修饰的变量赋值后不可改变
final修饰的成员变量必须在类中赋初值
类属性:在静态初始化块中、在声明该属性时指定初始值
实例属性:在非静态初始化块、声明属性、构造器中指定初始值
系统不会对final修饰成员进行隐式初始化
final修饰的引用变量只是保证它所指向的地址不改变,而该引用的内容是可以改变的
final修饰的方法不可被重写,但可以重载
final修饰的类不可继承
10、不可变类
创建该类的实例后,实例的属性不可改变
8个包装类、java.lang.String都是不可变类
hashcode返回的是对象地址
final修饰的引用类型变量不符合不可变,那么我们在设计类的时候必须将此变量保护起来。
11、缓存实例的不可变类
如果程序需要经常使用某些实例,则应把其缓存
Example:
利用数组作为缓存池
public class CacheImmutale
{
private final String name;
private static CacheImmutale[]a=new CacheImmutale[10];
private static int pos=0;
public CacheImmutale(String name)
{
this.name=name;
}
public String getName()
{
return name;
} //利用valueOf创建对象,而不用构造器
public static CacheImmutale valueOf(String name)
{
for(int i=0;i<10;i++)
{
if(a[i]!=null&&a[i].getName().equals(name))
return a[i];
}
if(pos==10)
{
a[0]=new CacheImmutale(name);
pos=1;
return a[0];
}
else
{
a[pos++]=new CacheImmutale(name);
return a[pos-1];
}
} //重写equals
public boolean equals(Object obj)
{
if(obj instanceof CacheImmutale)
{
CacheImmutale aa=(CacheImmutale)obj;
if(name.equals(aa.getName()))
{
return true;
}
return false;
}
} //重写hashCode
public int hashCode()
{
return name.hashCode();
}
}
12、抽象类
抽象方法与抽象类的规则:

利用抽象类就是利用一种模板模式
抽象父类中提供多个子类的通用方法,子类再进行具体的实现补充。
13、接口
接口中所有的方法都是抽象方法
接口规定类中应具体提供的方法,但不管具体实现
syntax:
[修饰符] interface Name extends 父接口1, 父接口2...
{ }

接口中可以包含属性(只能是常量),方法(只能是抽象实例),内部类(包括内部接口)和枚举类的定义
只能是public 、static、final(系统默认)
方法、内部类、枚举类 自动用public static 修饰

使用接口:

类必须实现接口内的所有方法,只能用public

模拟多继承
interface and abstract class

Java 4的更多相关文章
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题
背景起因: 记起以前的另一次也是关于内存的调优分享下 有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...
- Elasticsearch之java的基本操作一
摘要 接触ElasticSearch已经有一段了.在这期间,遇到很多问题,但在最后自己的不断探索下解决了这些问题.看到网上或多或少的都有一些介绍ElasticSearch相关知识的文档,但个人觉得 ...
- 论:开发者信仰之“天下IT是一家“(Java .NET篇)
比尔盖茨公认的IT界领军人物,打造了辉煌一时的PC时代. 2008年,史蒂夫鲍尔默接替了盖茨的工作,成为微软公司的总裁. 2013年他与微软做了最后的道别. 2013年以后,我才真正看到了微软的变化. ...
- 故障重现, JAVA进程内存不够时突然挂掉模拟
背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...
- 死磕内存篇 --- JAVA进程和linux内存间的大小关系
运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...
- 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用
有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...
- Java多线程基础学习(二)
9. 线程安全/共享变量——同步 当多个线程用到同一个变量时,在修改值时存在同时修改的可能性,而此时该变量只能被赋值一次.这就会导致出现“线程安全”问题,这个被多个线程共用的变量称之为“共享变量”. ...
- Java多线程基础学习(一)
1. 创建线程 1.1 通过构造函数:public Thread(Runnable target, String name){} 或:public Thread(Runnable target ...
- c#与java的区别
经常有人问这种问题,用了些时间java之后,发现这俩玩意除了一小部分壳子长的还有能稍微凑合上,基本上没什么相似之处,可以说也就是马甲层面上的相似吧,还是比较短的马甲... 一般C#多用于业务系统的开发 ...
随机推荐
- 三界商城 ajax调用城市接口,竟然需要登录,调用的接口需要登录,如果不登录 重定向到登录
现象 商家入驻 填写信息的 ajax请求没有数据 network->name-headers 返回302 发现调用的接口,需要登录,否则重定向登录 //初始化用户信息查询 public func ...
- ipv4属性无法打开
设置开机启动项: 点击左下角开始或windows+R-->msconfig 打开组策略:Windows+R-->输入gpedit.msc ipv4属性打不开 经过查看组策略什么未配置 ...
- android平台短视频技术之 视频编辑的经验分享.
android平台短视频技术之 视频编辑的经验分享. 提示一: 各位看官,这里分享的是视频编辑,即剪切/拼接/分离/合并/涂鸦/标记/叠加/滤镜等对视频的编辑操作.不是流媒体网络播放等功能,请注意. ...
- select与ajax结合
要实现的功能是,点击select输入框,数据库里面的数据会以option弹出. 这需要用到ajax异步连接数据库 下面贴出代码 先说明一下后台传递的数据是json,以map的形式传入的.后台代码很简单 ...
- nginx(1)
下一篇:nginx(2) 一.engin X 市场的服务器非常的多,这里简单介绍几种常用的. Apache:源代码开放,跨平台,可移植,且支持的模块非常丰富,虽然在速度性能上不如其他轻量级的web服务 ...
- haproxy(1)
参考文档: http://cbonte.github.io/haproxy-dconv/1.5/configuration.html 一.Haproxy 软件负载均衡一般通过两种方式来实现:基于操作系 ...
- PowerCmd(命令行增强工具) 2.2 免费版
软件名称: PowerCmd(命令行增强工具) 2.2 免费版 软件语言: 英文 授权方式: 免费软件 运行环境: Win7 / Vista / Win2003 / WinXP 软件大小: 1.8MB ...
- nodejs 实现简单的文件上传功能
首先需要大家看一下目录结构,然后开始一点开始我们的小demo. 文件上传总计分为三种方式: 1.通过flash,activeX等第三方插件实现文件上传功能. 2.通过html的form标签实现文件上传 ...
- 2015 QQ最新登录算法
首先还是取得验证码,抓包可得:http://check.ptlogin2.qq.com/check?regmaster=&pt_tea=1&uin=2630366651&app ...
- nginx 403
location / { autoindex on; } chown -R www-data:www-data /var/www usermod -a -G www-data rootnano /et ...