一、面向对象
主要操作是标准的模块化的设计,进行重用设计,使用的时候 根据标准进行模块的拼装就有了Java的三大特效:封装,继承,多态
- 封装:将对象的属性和实现细节隐藏起来,外部不可见,仅对外提供公有的访问方式
- 继承:继承的类可以从被继承的类中获得一些属性和方法,在已有的基础上进行扩充。继承是作为多态的前提
- 多态:只要实现或继承了同一个类或者接口,那么就可以使用父类中相应的方法
三个步骤
- OOA:面向对象分析
- OOD:面向对象设计
- OOP:面向对象编程
二、类和对象
类是对某一类事物的共性的抽象概念,对象描述的是某一个具体的产物
类中会有:
- 成员属性(Field):详细信息
- 成员方法(Method):定义对象具有的处理行为
public class dog{ //类:狗
private String name; //私有的属性:名称
private int age; //私有的属性: 年龄
public void eat(){//方法:吃饭
System.out.println("吃饭)
}
public void dog(){} //空参构造
public dog(String name){
this.name = name;
}//有参构造
public dog(String name, int age){
this.name = name;
this.age = age;
}//全参构造
public String getName(String name){
return this.name = name; //this关键字
}
public void setName(String name){ //设置和修改数据
this.name = name;
}
}
垃圾空间:没有被任何栈内存指向的堆内存空间,所有的垃圾都将被GC(垃圾收集器)不定期回收,不定期释放内存空间,垃圾过多将影响GC的处理性能
一个栈内存只能够保存有一个堆内存的地址数据
1、 构造方法:类对象的属性初始化
要求如下:
- 构造方法名称与类名称保持一致
- 构造方法没有返回值
- 构造方法在使用new 实例化的时候自动调用
2、匿名对象
只在生产的时候在堆中开创空间,不在栈中记录地址值,结果是只使用一次,就被GC 回收了
三、 关键字
this关键字
- 当前类中的属性:this.属性
- 当前类中的方法(普通方法、构造方法):this()、this.方法名()
- 描述当前对象:
static关键字
用来修饰类的成员方法,类的成员变量,编写static代码块
被static关键字修饰的方法或者变量,不需要依赖对象来访问,类被加载了就可以天赋哦类名访问
- static 修饰成员方法:静态方法,不依赖任何对象就可以进行访问,不能访问类的非静态的成员变量和成员方法
- static修饰成员变量:被所有对象共享,类初次加载的时候初始化,在内存中只有一个副本
- static修饰代码块:静态代码块,只会在类初次加载的时候执行一次,可以用来优化程序性能
final关键字
- 修饰类:表明这个类不能被继承,类中的成员变量和成员方法被隐式的指定为final
- 修饰变量:基本数据类型:不能更改;引用类型:不能指向另外的对象
- 修饰方法:private 方法被隐式的指定为final方法
三、数组
内存中存储相同数据类型的连续的空间,且有固定长度,数组长度一旦声明,就不可以改变和追加
数组是对象:具有Java中其他对象的基本特点:封装了数据,可以访问属性,可以调用方法
四、字符串String
Java中的字符串是存放在数据区(静态区),以Unicode编写的字符集合
String本身包装的是一个数组
- 不可变字符串:String类:字符串对象创建完毕后就内容 是不能改变的(final)
- 可变字符串:StringBuffer和StringBuild 类 的对象内容是可变的
- 直接赋值实例化:String a= “xxx” String b = “xxx” a=b;true(数据共享)JVM中底层有一个专门的字符串池→本质是一个数组,池中没有数据,保存新数据,赋值先查,没有,就开辟新空间,保存新数据,相同数据定义的时候,减少对象的产生,提升性能(入池重用)
- 构造方法实例化:String c = new String(“xxx”); 新开辟堆内存空间 存在垃圾空间
String 常量池
- 静态常量池:程序在加载的时候会自动将此程序之中保存的字符串,常量,类的方法和信息,全部进行分配
- 运行时常量池:当一个程序加载后,里面有一些变量,提供的常量池
String的常用方法
JavaDoc Java文档API
- 类的完整定义
- 类相关说明信息
- 成员属性摘要
- 构造方法摘要
- 方法摘要
字符串常用方法
//字符
public String (Char[] value)//字符数组全部转成字符串
public String (Char[] value,int offset,int count)//从offset开始总共count个字符转为字符串
public char[] toCharArray()//字符串转字符数组
//字节数组转换
public String(Byte[] bytes)//字节数组转为字符串
public String (Byte[] bytes,int offset,int count)//从offset开始总共count个字节转为字符串
public byte[] getBytes()//将字符串转为字符数组
public byte[] getBytes(String charsetName)throws UnsupportedEncodingException//编码转换
String a = "test1"
String b = "test1"
a==b //比较地址
a.equals(b)//比较值
a.equalsIgnoreCase(b)//不区分大小写比较
String c ="m"
String d = "M"
a.compare(d) = 32
a.compareIgnoreCase(d) = 0
contains //判断字符串是否存在
indexOf //从头查找指定字符串的位置,找不到返回-1
startsWith //判断 是否以xxx开始
endsWith //判断 是否以xxx结束
//替换
public String replaceAll(String regex,String s) //全部替换
public String replaceFirst(String regex,String s)//替换首个
//设计到**正则表达式**!
//拆分
public String[] split(String regex)//全部拆分
public String[] split(String regex,int x)//拆成x个
//拆不开 涉及到正则表达式,需要转义 \\
//截取
subString(int x) //从x所有截取到结尾
subString(int x,int y)//从索引x截取到y
//格式化字符串 JDK1.5开始
format//常用于日期格式化
a.contact("1) //连接
intern//字符串入池
isEmpty//判空字符串“” 有实例化对象
length() //计算长度
trim() //去除左右空格
toUpperCase()//转大写
toLowerCase()//转小写