五面向对象基础上1Word文档格式.docx
《五面向对象基础上1Word文档格式.docx》由会员分享,可在线阅读,更多相关《五面向对象基础上1Word文档格式.docx(49页珍藏版)》请在冰豆网上搜索。
}
publicclassDemo01
publicstaticvoidmain(Stringargs[])
Personp1=null;
//声明对象
p1=newPerson();
//实例化对象
p1.name="
张三"
//赋值
p1.age=50;
p1.tell();
对象是保存在栈内存中,属性是保存在堆内存中,方法是保存在全局代码区之中,此区中的内容是所有对象共享的。
如果不实例化会怎么样?
Exceptioninthread"
main"
java.lang.NullPointerException
atDemo01.main(Demo01.java:
19)
在引用操作中如果一个对象没有堆内存的引用,而调用了类中的属性或方法,就会出现空指向异常。
Personp1=newPerson();
Personp2=newPerson();
p2.name="
李四"
p2.age=100;
p2=p1;
p2.tell();
GC:
垃圾收集机制的简称
与垃圾回收有关的知识:
1、finalize()方法
Java有垃圾回收的机制,当一个对象变成垃圾,他所引用的其他对象在没有被别的有效的句柄引用的话,也会随之变成垃圾,也就是不用程序员再去做“释放对象在生存期间所占用的一些资源”这样的事情了finalize()方法是在对象被当着垃圾从内存中释放前调用,而不是在对象变成垃圾前调用,垃圾回收器的启用不由程序员控制,也无规律可循,并不会一产生了垃圾,它就被唤起,甚至有可能到程序终止,它都没有启动的机会。
因此这并不是一个很可靠的机制,所以,我们无法保证每个对象的finalize()方法最终都会被调用。
下面,我们通过程序来了解finalize()方法:
publicvoidfinalize()
theobjectisgoing!
);
publicstaticvoidmain(String[]args)
newPerson();
theprogramisending!
编译运行后的结果是:
在上面的程序中,我们产生了三个匿名对象,这些对象在执行
System.out.println("
语句前都变成了垃圾,但我们并没有看到垃圾回收时finalize方法被调用的效果。
2、System.gc的作用
Java的垃圾回收器被执行的偶然性有时候也会给程序运行带来麻烦,比如说在一个对象成为垃圾时需要马上被释放,或者程序在某段时间内产生大量垃圾时,释放垃圾占据的内存空间似乎成了一件棘手的事情,如果垃圾回收器不被启动,finalize()方法也不会被调用。
为此,Java里提供了一个System.gc()方法,使用这个方法可以强制启动垃圾回收器来会收垃圾
将上面的程序作如下修改:
System.gc();
编译运行的结果如下:
theprogramisending
第二节封装性
封装的目的:
保护内容。
(保证某些属性和方法不被外部所见)
如何访问封装的内容
在java中对于封装性的访问java中给出了明确的原则,被封装的属性如果需要被访问,则需要编写setter和getter方法完成。
如:
privateintage;
Setter(设置):
publicvoidsetAge(intn){}
Getter(取得):
publicintgetAge(){};
setXxx
getXxx
privateStringname;
privateintage;
publicvoidsetName(Stringn)//(Stringname)
name=n;
//this.name=name;
publicvoidsetAge(inta)//(intage)
age=a;
//this.age=age;
publicStringgetName()
returnname;
publicintgetAge()
returnage;
Personp1=null;
p1=newPerson();
p1.setName("
zhangsan"
p1.setAge(-60);
在setter中加入判断条件
publicvoidsetAge()
if(age>
=0&
&
age<
150)
this.age=age;
this.属性名称(表示类中的属性)
第三节构造方法与匿名对象
构造方法的主要作用:
就是给类中的属性初始化。
publicPerson(){}
publicPerson(Stringname)
this.setName(name);
publicPerson(Stringname,intage)
this.setAge(age);
publicvoidsetName(Stringname)
this.name=name;
publicvoidsetAge(intage)
newPerson("
lisi"
100).tell();
newPerson("
1).tell();
第四节String类和StringBuffer类
String类的两种实例化方式
String的两种比较操作
String类的两种实例化方式区别
String使用特点
StringBuffer与String的区别
classStringDemo01
publicstaticvoidmain(String[]args)
Stringname="
System.out.println(name);
classStringDemo02
{Stringname=newString("
//实例化String对象
System.out.println(name);
一个字符串就是String的匿名对象。
classStringDemo03
{intx=100;
inty=100;
System.out.println(x==y);
classStringDemo04
{
Stringstr1="
hello"
Stringstr2=newString("
Stringstr3=str2;
System.out.println(str1==str2);
System.out.println(str1==str3);
System.out.println(str2==str3);
classStringDemo05
System.out.println((str1.equals(str2)));
System.out.println((str1.equals(str3)));
System.out.println((str2.equals(str3)));
Sring有两种比较方式:
1、“==”地址值2、equals比较内容(常用)
classStringDemo06
System.out.println(("
.equals("
)));
String中有个equals方法,我们能用一个字符串调用equals方法,那么字符串肯定是String的匿名对象
classStringDemo07
Stringstr2="
Stringstr3="
直接使用赋值的方式,可以有效的节省内存
如果使用newstring()?
Stringname=newString("
字符串的内容一旦声明将不可改变
StringBuffer
StringBuffer是使用缓冲区的,本身也是操作字符串的,但是与String类不同,String类的内容一旦声明之后则不可改变,改变的只是其内存地址的指向,而StringBuffer中的内容是可以改变的。
StringBuffer类不能像String那样采样直接赋值的方式进行对象的实例化,必须通过构造方法完成。
如果频繁修改字符串的内容则使用StringBuffer类完成。
publicclassDemo{
publicstaticvoidmain(Stringargs[]){
StringBufferbuf=newStringBuffer();
buf.append("
helloworld"
);
for(inti=0;
i<
5;
i++){
buf.append(i);
//StringBuffer可以修改,性能高
}
System.out.println(buf);
};
第五节String类的常用方法
一、字符数组和字符串
1、将字符串转字符数组
publicchar[]toCharArray()
2、将字符数组转字符串
publicString(char[]
value)
publicString(char[]value,intoffset,intcount)
classStringDemo
//charc[]=str1.toCharArray();
charc[]={'
h'
'
e'
l'
o'
c.length;
i++)
{
System.out.print(c[i]+"
\t"
Stringstr2=newString(c);
Stringstr3=newString(c,0,3);
System.out.println(str2);
System.out.println(str3);
二、从字符串中取出指定位置的字符
publiccharcharAt(int
index)
classStringDemo
System.out.println(str1.charAt(0));
三、字符串与byte数组的转换
字符串转字节数组
publicbyte[]getBytes()
字节数组转字符串
publicString(byte[]
bytes)
publicString(byte[]bytes,intoffset,intlength)
classStringDemo
byteb[]=str1.getBytes();
//字符串转字节数组
System.out.println(newString(b));
//字节数组转字符串
System.out.println(newString(b,0,4));
//部分字节数组转字符串
四、取得一个字符串的长度
publicintlength()
helloworld"
System.out.println(str1.length());
五、查找指定的字符串是否存在
publicintindexOf(String
str)
publicintindexOf(Stringstr,intfromIndex)
jsjfdfjkjv"
System.out.println(str1.indexOf("
x"
));
j"
2));
六、去除空格
publicStringtrim()
helloworld"
System.out.print(str1.trim());
System.out.print("
xxxx"
七、字符截取(如省略该参数,则将从字符串的首字符开始检索。
publicStringsubstring(int
beginIndex)
publicStringsubstring(intbeginIndex,intendIndex)
hellworld"
System.out.println(str1.substring
(1));
System.out.print(str1.substring(2,6));
八、拆分字符串
publicString[]split(String
regex)
Strings[]=str1.split("
"
//按空格进行字符串的拆分
s.length;
{
System.out.print(s[i]);
}
九、大小转换
publicStringtoUpperCase()
publicStringtoLowerCase()
System.out.print("
.toUpperCase());
HELLO"
.toLowerCase());
十、判断是否以指定的字符串开头或结尾
publicbooleanstartsWith(String
prefix)
publicbooleanendsWith(String
suffix)
###hello"
Stringstr2="
hello###"
if(str1.startsWith("
###"
))
System.out.println(str1);
if(str2.endsWith("
System.out.println(str2);
十一、不区分大小写的比较
publicbooleanequalsIgnoreCase(String
anotherString)
System.out.println(str1.equals(str2));
System.out.println(str1.equalsIgnoreCase(str2));
十二、字符串替换功能
publicStringreplaceAll(Stringregex,Stringreplacement)
System.out.println(str1.replaceAll("
l"
"
第六节this关键字
表示类中的属性
this.age=age;
publicStringgetIn