最大特点在于面向对象的编程设计
面向对象主要这几模式为模块化设计,可以进行从用配置。在整个面向对象的设计里面更对情况下考虑的是标准。在使用的时候根据标准进行拼装,而对于面向对象有3个特征
封装性:内部的操作对外部而言不可见,内部操作都不可直接使用的时候才是最安全的;
继承性:在已有结构的基础上继续进行功能的扩充;
多态性:是在继承的基础上扩充而来的概念,指的是类型的转换处理;
面向对象开发的3个步骤
OOA:面向对象分析
OOD:面向对象设计
OOP:面向对象编程
类是对某一类事物的共性的抽象概念,而对象描述的是一个具体的产物。
类是一个模板,而对象才是类可以使用的实例,现有类再有对象
类一般会由连个组成
成员属性
操作方法
类是一个独立的结构体,所需要使用class来进行定义,而在类之中主要由属性和方法组成,那么属性就一个个具体的变量
声明并实例化对象:类名称 对象名称 = new 类名称();
分步骤完成:声明对象,实例化对象;
获取完实例化对象之后,那么需要通过对象进行类中的操作调用,此时有两种调用方法;
调用类中的属性:实例化对象.成员属性;
调用类中的方法:实例化对象.方法名称();
Java中类属于引用数据类型,引用数据类型最大的困难在于进行内存管理,同事进行操作的时候和内存关系的变化。进行简单的分析。
如果要进行内存分析,那么首先给出两块最为常用的内存空间:
堆空间:保存的是对象的具体信息,在程序之中堆内存空间的开辟是通过new完成的;
栈内存:保存的是一款堆内存的地址:即通过地址找到堆内存,而后找到对象内容;可以简单的理解为对象的名称保存在栈内存中;
本质:同一块对内存空间,可以被不同的栈内存所指向,也可以更换指向;
实例化对象是(内存地址、数值)
引用传递可以发生在方法上,这个时候一定要观察方法的参数类型,同时要观察方法的执行过程。
如果堆内存引用传递处理不当,会造成垃圾的产生。
所谓的垃圾空间指的就是没有任何栈内存所指向的堆内存空间,所以的垃圾将被GC不定期进行回收并且释放无用的内存空间。垃圾过多,将影响GC的处理性能,开发中产生越少越好;
一般方法都是对外提供服务的,所以不会有较高的安全线,所以往往需要对其进行保护,这个时候就需要采用封装性对属性进行保护。
在默认情况下,对于类中的属性是可以通过其他类利用对象进行调用的。此时可以利用private关键字对属性进行封装处理;而属性一旦封装后外部不能直接访问,但是对类的内部是可见的,如果想访问封装的属性,则java开发标准提供如下要求:
设置或者获取属性(get/set)get***;set***;
可以通过构造方法实现实例化对象中的属性初始化处理;
在以后所编写的程序代码中,只要是访问奔雷中的属性的时候,请一定加上“this”
12.static属性
进行类设计的时候首选的一定是非static属性(95%),而考虑到刚刚信息的储存的时候才会用static属性。Static属性必须在实例化对象产生之后才可以使用,而static属性可以在没有实例化对象的情况下直接通过类名称访问。
14.static应用
实例化对象个数统计,没一次创建新的实例化对象都可以实现一个统计操作;
class Book {
private String title;
private static int count = 0;
public Book(){}
public Book(String title){
this.title = title;
count++;
System.out.println("这是新创建的第"+count+"书");
}
public String getTitle(){
return this.title;
}
}
public class Demo {
public static void main(String args[]) {
System.out.println(new Book("java").getTitle());
System.out.println(new Book("jsp").getTitle());
System.out.println(new Book("sql").getTitle());
}
}
15.普通代码块
26.增强for循环(foreach)
For(数据类型 变量:集合){}
41.String字符串
使用“”定义,用+号连接,用jvm制造的简单可以使用的数据类型,可以直接赋值;字符串中每个字符数据保存在数组中;
Jdk1.8String保存的是字符数组;jdk1.9String保存的是字节数组;
Private final char value[]; Private final byte[];
字符串就是数组的一种特殊包装应用,但是同时清楚它是无法改变的;
两种对象的实例化形式:直接赋值,构造方法;
42.字符串比较
使用“==”的关系表达式,但是不准确;
可以equals实现字符串的比较;
==:进行的是数值比较,如果对象的比较上比较的是两个内存的地址的数值;
equals:是类所提供的一个比较方法,可以直接进行字符串内容判断;
44.直接赋值的特点可以自动将对象保存到对象池之中;
String类两种对象实例化凡是区别
直接赋值:只会参生一个实例化对象,并且可以保存在对象池中,已实现该字符串实例的重用。
构造方法:会参生两个实例化对象,并且不会保存在对象池中,无法实现对象复用,但是可以利用intern()方法手工入池处理。
46.String内容保存
String不可修改
由此可以发现整个处理过程中,字符串常量内容并一个月任何的引用,并且这种改变将有可能带来大量的垃圾空间。不要频繁修改String的内容
47.java主方法组成
Public static void main(String args[]){}
Public:描述访问权限;
Static:程序的执行是通过类名称完成的,所以此方法是由类直接调用;
Void:主方法是一切的起点,一旦开始就没有返回的可能;
Main:系统定义好的名称;
String args[]:字符串的数组,可以实现程序启动的接收;
49.字符串与字符
Jdk1.9以前String都利用了字符数组实现了包装处理,所以String包含构造方法和普通方法两类;
No | 方法名称 | 类型 |
|
01 | Public String (char[] value) | 构造 | 将传入的字符数组变成字符串 |
02 | Public String(char[] value,int offset,int count) | 构造 | 将传入的部分字符数组变成字符串 |
03 | Public char charAt(int index) | 普通 | 获取指定索引位置的字符 |
04 | Public char[] toCharArray() | 普通 | 将字符串中的数据已字符数组的形式返回 |
50字符串与字节
No | 方法名称 | 类型 |
|
01 | Public String (byte[] bytes) | 构造 | 将传入的字符数组变成字节 |
02 | Public String(byte[] value,int offset,int count) | 构造 | 将传入的部分字符数组变成字节 |
03 | Public byte getByte () | 普通 | 将字符串转换为字节 |
04 | Public byte []getByte (String charsetName)throws nseupportedEncodintException | 普通 | 编码转换 |
51字符串比较
No | 方法名称 | 类型 |
|
01 | Public boolean equals(String anObject) | 普通 | 区分大小写比较 |
02 | Public boolean equalsIgnoreCase(String anObjectString) | 普通 | 不区分大小写比较 |
03 | Public int compare(String anObjectString) | 普通 | 进行字符串大小比较,该方法会返回int类型数据,3种取值:大于(>0),小于(<0),等于(=0) |
04 | Public int compareIgnoreCase(String anObjectString) | 普通 | 不区分大小写进行字符串大小比较 |
53.字符串替换
No | 方法名称 | 类型 |
|
01 | Public String replaceAll(String regex,String replacement) | 普通 | 替换全部 |
02 | Public String replaceFirst(String regex,String replacement) | 普通 | 替换首字母 |
54.字符串拆分
No | 方法名称 | 类型 |
|
01 | Public String[] split(String regex) | 普通 | 按照指定字符串全部拆分 |
02 | Public String replaceFirst(String regex,int replacement) | 普通 | 按照指定字符串拆分为指定个数 |
55.字符串截取
No | 方法名称 | 类型 |
|
01 | Public String substring(int beginIndex) | 普通 | 从指定索引截取到结尾字符串 |
02 | Public String substring(int beginIndex,int endIndex) | 普通 | 截取指定索引范围字符串 |
56.字符串格式化
No | 方法名称 | 类型 |
|
01 | Public static String format(String format,各种类型) | 普通 | 根据指定结构进行文本格式化显示 |
57字符串格式化
No | 方法名称 | 类型 |
|
01 | Public static concat(String str) | 普通 | 描述字符串的连接 |
02 | Public String intemperate(); | 普通 | 字符串入池 |
03 | Public boolean isEmpty(); | 普通 | 判断是否为空字符串 |
04 | Public int length(); | 普通 | 计算字符串长度 |
05 | Public String trim(); | 普通 | 驱逐左右空格 |
06 | Public String toUpperCase(); | 普通 | 转大写 非字母不转 |
07 | Public String toLowerCase (); | 普通 | 转小写 非字母不转 |
59.继承的实现
使用extends关键字
无论你如何折腾,在实例化子类对象的同时一定会实例化父类对象。
只要是在子类中调用父类方法的时候一定要在方法前追加有“super.方法”。
65.final关键字
在java中使用final关键字,可以实现定义不能被继承的类和不能被覆写的方法,常量。
78.object
解决参数的统一问题,使用object类可以接受所有数据类型。
Java中object不存在继承关系,所有类都是object的子类,因此使用object类可以接受所有子类对象;
79.获取对象信息
Object对象获取一个对象的完整信息:public String toString();
84.包装实现及原理
Number是一个抽象类
Jdk1.5之后提供自动支持功能,到jdk1.9之后为了滚股此概率。将包装类的构造方法都设置为过期定义了;
Object对象可以接受任何数据类型的数据,包装对象可以直接参与数学运算;
但是object对象不能直接获取,需要向上赋值((数据类型)obj)
86.接口的定义
接口可以理解为一个纯粹的抽象类,从jdk1.8后,引入Lambda表达式的概率,所以接口的定义也得到了加强,处理抽象方法与全局常量,还可以定义普通方法和静态方法。
95.泛型jdk1.5,其主要目的为了解决ClassCastException的问题,在进行对象的向下转型时永远都可能存在安全隐患,而java希望通过泛型可以 慢慢解决此类问题
泛型问题的出现,描述x和y坐标的处理类,并且这个类中国允许开发者保存
整数数据:x=10,y=20;
浮点型数据:x=10.1,y=20.1;
字符串型数据:x=”东经10度”,y=”北纬20度”;
于是利用设计Point类的时候就需要去考虑具体的x和y属性的类型这时类型要求就可以利用object类进行定义,因为存在有如下的转型关系;
整数数据:基本数据类型->包装为Integer类对象->自动向上转型为object
浮点型数据:基本数据类型->包装为doule类对象->自动向上转型为object
字符串型数据:string类对象->自动向上转型为object
97.