Java学习第八天
1、多态中成员的特点:
1:成员变量: 编译时期看父类,运行结果看父类
2:成员方法: 编译时期看父类,运行结果看子类(子类把方法重写了)
3:静态方法: 编译时期看父类,运行结果看父类
2.object:根类,超类,对所有对象共性的提取,所有
任何类,如果没有书写extends显示继承某个类,都默认直接继承object类
object类中所定义的方法,是所有对象都具备的方法(11个方法,可以自己查一下api吧)
特点:
object类型可以存储任何对象:
作为参数,可以接受任何对象
作为返回值,可以返回任何对象
例如:
boolean equals(object obj);
3.当输出一个对象时,默认调用了 tostring()方法,默认tostring()方法返回:类名@对象的哈希值
1.默认实现
int hash=ren1.hashcode();
system.out.println(integer.tohexstring(hash));
//得到对象对应的字节码
class classz=ren1.getclass();//person.class 被面向对象了 class
string name = classz.getname();
system.out.println(name);
//最后结合输出
system.out.println(ren1.getclass().getname()+"@"+integer.tohexstring(ren1.hashcode()));
2.通常重写tostring(),返回属性的值
public string tostring(){
return name+","+age;
}
4.模板设计模式:在实现一个功能时,功能的一部分是确定的,一部分是不确定的,确定的部分会用到不确定的部分
那么就把不确定的部分暴露出去,让子类去实现
1 例如:计算程序运行的时间 2 abstract class timetool 3 { 4 public final void tongjitime() 5 { 6 //在程序运行前记录一个时间 7 long start=system.currenttimemillis(); 8 9 //功能代码 10 fun(); 11 12 //在程序运行后记录一个时间 13 long end=system.currenttimemillis(); 14 system.out.println("程序运行时间为:"+(end-start)+"毫秒"); 15 } 16 public abstract void fun(); 17 } 18 19 class test extends timetool 20 { 21 public void fun(){ 22 for(int i=1;i<=3000;i++) 23 { 24 system.out.println(i); 25 } 26 } 27 } 28 class demo4 29 { 30 public static void main(string[] args) 31 { 32 test test = new test(); 33 test.tongjitime(); 34 } 35 }
5.内部类:在一个类的内部定义的类就叫内部类(把内部类看成成员),成员和成员之间可以相互使用
内部类的特点:
1.编译后可生成独立的字节码文件
2.内部类可直接访问外部类的私有成员,为不破坏封装
3.可为外部类提供必要的内部功能组件
6.内部类的字节码:外部类$内部类.class
7.什么时候需要定义内部类?需要描述事物内部的事物
8.成员内部类:在类的内部定义,与实例变量、实例方法同级别的类
外部类的一个实例部分,创建内部类对象时,必须依赖外部类对象
特点:当外部类、内部类存在重名属性时,会优先访问内部类属性
成员内部类不能定义静态成员
1 class outer{ 2 3 class inner{ 4 5 } 6 } 7 8 class outer{ 9 10 static class inner{ 11 public static void show(){} 12 } 13 } 14 15 outer out=new outer(); 16 inner in=out.new inner();
内部类访问外部类对象: 外部类名.this
内部类访问外部类对象中的成员,外部类名.this.成员名
9.静态内部类:内部类属于成员,所以可以被static修饰,内部类中的方法是静态的,那么内部类必须是静态的
不依赖外部类对象,可直接创建或通过类名访问,可声明静态成员
只能直接访问外部类的静态成员(实例成员需实例化外部类对象)
outer.inner inner=new outer.inner();
outer.inner.show();
10.局部内部类:定义在外部类的方法中,作用范围和创建对象范围仅限于当前方法
局部内部类访问外部类当前方法中的局部变量时,因为无法保障变量的生命周期与自身相同,变量必须修饰为final
限制类的使用范围(jdk1.8开始,局部内部类使用的局部变量不需要使用final 修饰)
11.匿名内部类:没有类名的局部内部类(一切特征都与局部内部类相同)
特点:必须继承一个父类或者实现一个接口
定义类、实现类、创建对象的语法合并,只能创建一个该类的对象
优点:减少代码量
缺点:可读性较差
1 适用于类和接口: new object(){ 2 string name; 3 public void show(){ 4 } 5 }.show(); 6 7 object obj= new object(){ 8 string name; 9 public void show(){ 10 } 11 }; 12 13 14 new inter(){ 15 public void show(){ 16 } 17 }.show(); 18 19 20 inter tt=new inter(){ 21 public void show(){ 22 } 23 };
12.字符串: class final string extends object
是常量,一旦定义了就不可以改变了
存储在方法区的常量池
已经存在的字符串,再定义时直接使用已经存在的
重写了equals()方法
string s=new string("hello");//产生两个对象,堆、池中各存储一个
charat(6)
indexof()
lastindexof()
contains()
equals()
equalsignorecase()‘/
startswith()
endswith();
13.字符串获取:
获取字符串的长度
int length()
获取某一个位置上的字符
char charat(int index)
获取字符在字符串中的位置
如果要找的字符或者字符串不存在,返回值为-1
int indexof(char ch)//返回字符在字符串中第一次出现的位置
int indexof(int ch, int fromindex)//第二个参数用于指定开始找的位置
int indexof(string str) //获取一个字符串在字符串中出现的位置
int indexof(string str, int fromindex)//第二个参数用于指定开始找的位置
int lastindexof(char ch)//最后一次出现的位置
14.字符串判断:
判断是否包含一个字符串
boolean contains(charsequence s)
判断两个字符串的内容是否相同
boolean equals(object anobject)
忽略大小写判断两个字符串的内容是否相同
boolean equalsignorecase(string anotherstring)
判断是否以某字符串开头
boolean startswith(string prefix)
判断是否以某字符串结尾
boolean endswith(string suffix)
15.字符串转换:将字符数组转换成字符串
1:使用构造方法
string(char[] value)
string(char[] value, int offset, int count)
2:使用静态方法
static string copyvalueof(char[] data)
static string copyvalueof(char[] data, int offset, int count)
将字符串转成字符数组
char[] tochararray()
16.将字节数组转成字符串
string(byte[] bytes)
string(byte[] bytes, int offset, int length)
string(byte[] bytes, string charsetname)//使用指定的编码将字节数组转换成字符成
将字符串转成字节数组
byte[] getbytes()
将基本数据类型转换成字符串
string.valueof()
17.字符串替换:
string replace(char oldchar, char newchar)
18.子串:
string substring(int beginindex)
string substring(int beginindex, int endindex) //包含起始位置,不包含结束位置,到结束位置的前一位
19.转换,去除空格,比较:
大小写转换
string tolowercase()
string touppercase()
将字符串两端的空格去掉
string trim()
按字典顺序比较两个字符串
int compareto(string anotherstring)
20.切割: string[] split(string)
21.可变字符串:
stringbuffer:可变长字符串,jdk1.0提供,运行效率慢、线程安全
stringbuilder:可变长字符串,jdk5.0提供,运行效率快、线程不安全
22.bigdecimal:可精确计算浮点数
上一篇: 自动化运维--SaltStack
推荐阅读
-
Java 的静态工厂方法以及相比于构造器的优势
-
Java中按顺序存取的Map集合 LinkedHashMap
-
Java利用POI读写Excel文件工具类
-
java设计模式《抽象工厂方法》
-
【Java小知识】Java程序的初始化
-
ocr学习第二篇:java通过实现百度AI提供的接口实现图片文字识别
-
Java后端参数校验SpringBoot+Hibernate Validator
-
Python学习之集合(set)的功能、定义和实例讲解
-
Java--多线程:一个变量初始值100,一个任务对它进行50次自增操作,而另外一个任务对它进行50次自减操作。
-
SpringBoot学习(四)配置文件值注入 @ConfigurationProperties和@Value两种方式区别