构造函数的返回值问题(构造函数没有返回值)
构造函数数据成员的赋值--对象被创建时会对其中各种类型的成员变量自动初始化赋值 多个构造函数可能带来的冲突(如果不定义程序就会默认提供,定义后就不再提供)
关键字this(理解成当前对象的引用或指针)
一个类的new出多个对象,成员变量放在内存的不同区域,但是方法只有一个且放在代码段---成员方法如何区别是哪一个对象掉用自己?--每一个非静态方法中都隐含一个this指针
关键字static(成员属于类)
非私有静态属性或方法可以直接用类名访问,类的对象也可以直接访问; 静态方法不可以访问非静态成员;非静态方法可以访问静态成员;
Static应用:创建对象计数;单态模式★--只能创建一个对象(见例子 TestStatic_2.java);
面向对象编程(下)
继承(extends)
(1)子类内部可以访问父类非私有的成员;
(2)子类的外部(子类new出来的对象),通过子类对象名只能访问从父类继承过来的非私有成员(反过来父类对象访问子类的成员同理,子类把public等修饰符也继承过来了) (3)通过子类的类名访问父类的成员
总之--私有不能被继承(私有成员逻辑上已经被继承过来的,只是不能访问,因此继承要慎重否则浪费内存空间) 不同包的继承问题
继承原则:区别汽车和车轮的关系(包含关系) 父类/基类--子类/派生类
super
java只允许单继承(C++允许多继承)接口可以一定程度上解决单继承的缺陷 Super的使用(见TestSuper_1.java/TestSuper_2.java/TestSuper_3.java)
Super的应用---情景:父类有很多很多属性,子类继承过来如果一个个进行初始化就会太麻烦,可以使用Super调用父类的构造器进行初始化 总结:
1、每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错。
2、如果显示的写出super();语句,则必须保证该语句是第一条语句,否则会出错
3、super();如果不写,则编译器会自动添加,所以此时如果父类没有无参的构造函数就会出错 4、既可以显示写super();前提是父类必须有无参的构造函数也可以显示写super(实参); 前提是父类必须有带参的构造函数
5、调用父类的构造函数的语句必须借助于super,不能直接写父类的类名,这与C++不同, 6、一个构造函数中不能写多个super(参数列表)语句; Super.f();
方法的重写--子类要比父类的权限大(否则多态无法实现) TestStudent.java 多态(一个父类的引用类型变量既可以指向父类对象也可以指向子类对象,它可以根据当前
时刻指向的不同,自动调用不同对象的方法,这就是多态) 多态的作用:同一段代码做不同的事情(TestPoly_1.java) 通过父类的引用只能指向子类从父类继承过来的成员; 父类的引用永远不可能直接赋给子类的引用;只有当在父类引用本身指向的就是一个子类对象时,才可以把父类引用强制转换为子类引用
抽象类(abstract 美[??b?str?kt])的由来:比如“植物”抽象词 abstract class A {
abstract public void f();//没有方法体的方法叫做抽象方法,抽象方法没有方法体 }
有抽象方法的类一定是抽象类,抽象类不一定有抽象方法;
可以定义一个抽象类的引用(多态抽象类),但不可以创建一个抽象类对象 Final:
修饰 整个类:表示不能被继承
成员属性:表示属性必须被赋值,且只能被赋值一次,通过两种方式 成员方法:可以继承但不可以重写
接口interface(特殊的抽象类)抽象方法和常量属性的集合
接口和抽象类的区别:抽象类是一个类可以被继承,接口不能被继承只能被实现用关键字implements(实现)
接口内的方法没有 {},不允许有非抽象方法 包:
Javac -d . TestPackage.java
Java myPackage.cy.TestPackage
Path: exe的路径
Classpath: class的路径 DOS命令:
设置类的路径:set classpath=c:\\Documents and setting\\... 同包不同类的访问: 启动类
Javac a.java b.java 两个一起编译 同包非私有成员都可以 不同包的访问:
共有的类的共有成员才可以被另外一个包的类访问 Import
公有类保证可以在另一个类中创建对象,公有方法 除了内部类 普通类只能用public 或者什么都不修饰 如何生成jar包 放在一个文件夹中
DOS下 jar cvf xxx.jar *(进入当前目录)
如何使用jar包
Import zhangsan.lidi.A;
Set classpath=c:\\documents and settting\\....t.jar;
面向对象的特点: 封装:
访问控制符:只有private
This:一个对象只含有属性的空间 private
继承:java只允许单继承,私有成员无法被继承 重写:方法名和参数列表和返回值必须一样 多态:
放在java.lang包中的类不需要引入,其他的类都需要手动引入
Object类的方法---toString()方法 一个类默认继承Object
该方法返回“类名@哈希码--该对象在内存堆中的地址”
System.out.println(类的对象名)--实际输出的是该对象的toString()方法所返回的字符串 重写toString方法的意义:为了实际需要
String和StringBuffer: JAVA的StringBuffer类:
StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。
所以在实际使用时,如果经常需要对一个字符串进行修改,例如插入、删除等操作,使用StringBuffer要更加适合一些。
在StringBuffer类中存在很多和String类一样的方法,这些方法在功能上和String类中的功能是完全一样的。
但是有一个最显著的区别在于,对于StringBuffer对象的每次修改都会改变对象自身,这点是和String类最大的区别。
另外由于StringBuffer是线程安全的,关于线程的概念后续有专门的章节进行介绍,所以在多线程程序中也可以很方便的进行使用,但是程序的执行效率相对来说就要稍微慢一些。
1、StringBuffer对象的初始化
StringBuffer对象的初始化不像String类的初始化一样,Java提供的有特殊的语法,而通常情况下一般使用构造方法进行初始化。 例如:
StringBuffer s = new StringBuffer();
这样初始化出的StringBuffer对象是一个空的对象。
如果需要创建带有内容的StringBuffer对象,则可以使用: StringBuffer s = new StringBuffer(“abc”);
这样初始化出的StringBuffer对象的内容就是字符串”abc”。
需要注意的是,StringBuffer和String属于不同的类型,也不能直接进行强制类型转换,下面的代码都是错误的:
StringBuffer s = “abc”; //赋值类型不匹配
StringBuffer s = (StringBuffer)”abc”; //不存在继承关系,无法进行强转 StringBuffer对象和String对象之间的互转的代码如下: String s = “abc”;
StringBuffer sb1 = new StringBuffer(“123”);
StringBuffer sb2 = new StringBuffer(s); //String转换为StringBuffer String s1 = sb1.toString(); //StringBuffer转换为String 2、StringBuffer的常用方法
StringBuffer类中的方法主要偏重于对于字符串的变化,例如追加、插入和删除等,这个也是StringBuffer和String类的主要区别。 a、append方法
public StringBuffer append(boolean b)
该方法的作用是追加内容到当前StringBuffer对象的末尾,类似于字符串的连接。调用该方法以后,StringBuffer对象的内容也发生改变,例如: StringBuffer sb = new StringBuffer(“abc”); sb.append(true);
则对象sb的值将变成”abctrue”。
使用该方法进行字符串的连接,将比String更加节约内容,例如应用于数据库SQL语句的连接,例如:
StringBuffer sb = new StringBuffer(); String user = “test”; String pwd = “123”;
sb.append(“select * from userInfo where username=“) .append(user)
.append(“ and pwd=”) .append(pwd);
这样对象sb的值就是字符串“select * from userInfo where username=test and pwd=123”。 b、deleteCharAt方法
public StringBuffer deleteCharAt(int index)
该方法的作用是删除指定位置的字符,然后将剩余的内容形成新的字符串。例如: StringBuffer sb = new StringBuffer(“Test”); sb. deleteCharAt(1);
该代码的作用删除字符串对象sb中索引值为1的字符,也就是删除第二个字符,剩余的内容组成一个新的字符串。所以对象sb的值变为”Tst”。 还存在一个功能类似的delete方法:
public StringBuffer delete(int start,int end) 该方法的作用是删除指定区间以内的所有字符,包含start,不包含end索引值的区间。例如: StringBuffer sb = new StringBuffer(“TestString”);
sb. delete (1,4);
该代码的作用是删除索引值1(包括)到索引值4(不包括)之间的所有字符,剩余的字符形成新的字符串。则对象sb的值是”TString”。 c、insert方法
public StringBuffer insert(int offset, boolean b)
该方法的作用是在StringBuffer对象中插入内容,然后形成新的字符串。例如:
StringBuffer sb = new StringBuffer(“TestString”); sb.insert(4,false);
该示例代码的作用是在对象sb的索引值4的位置插入false值,形成新的字符串,则执行以后对象sb的值是”TestfalseString”。 d、reverse方法
public StringBuffer reverse()
该方法的作用是将StringBuffer对象中的内容反转,然后形成新的字符串。例如: StringBuffer sb = new StringBuffer(“abc”); sb.reverse();
经过反转以后,对象sb中的内容将变为”cba”。 e、setCharAt方法
public void setCharAt(int index, char ch)
该方法的作用是修改对象中索引值为index位置的字符为新的字符ch。例如: StringBuffer sb = new StringBuffer(“abc”); sb.setCharAt(1,’D’);
则对象sb的值将变成”aDc”。 f、trimToSize方法
public void trimToSize()
该方法的作用是将StringBuffer对象的中存储空间缩小到和字符串长度一样的长度,减少空间的浪费。
总之,在实际使用时,String和StringBuffer各有优势和不足,可以根据具体的使用环境,选择对应的类型进行使用。
String中的equals方法
线程:
进程:一个程序加载数据后的一次运行
线程:TestThread_1.java 一个程序的 不同的执行路径
单线程:程序一步步执行,执行完上一步才执行下一步, 多线程(thread):创建线程后,多个线程之间交替执行 时间片轮转算法
创建线程的方法一:继承Thread 【注意】
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库《郝斌开发经验(java)》(2)在线全文阅读。
相关推荐: