赞
踩
String s1 = "abc";
String s2 = new String("abc");
boolean b = (s1 == s2);
其结果变量 b 的值是 false,因为 s1 对象对应的地址是 “abc” 的地址,而 s2 使用 new 关键字申请新的内存,所以内存地址和 s1 的 “abc” 的地址不一样,所以获得的值是 false。
charAt() 方法 :作用是按照索引值(规定字符串中第一个字符的索引值是 0,第二个字符的索引值是 1,依次类推),获得字符串中的指定字符。例如:
String s = "abc";
char c = s.charAt(1);
copy
则变量 c 的值是 ‘b’。
indexOf(char ch) 返回值为int类型,搜索字符 ch 第一次出现的索引
indexOf(String value) 返回值为int类型,搜索字符串 value 第一次出现的索引
lastIndexOf(char ch) 返回值为int类型,搜索字符 ch 最后一次出现的索引
lastIndexOf(String value) 返回值为int类型,搜索字符串 value 最后一次出现的索引
substring(int index) 返回值为String类型,提取从位置索引开始到结束的字符串
substring(int beginindex, int endindex) 返回值为String类型,提取 beginindex 和 endindex 之间的字符串部分
trim() 返回值为String类型,返回一个前后不含任何空格的调用字符串的副本
delete(int a,int b) 有两个参数,使用时删除索引从a开始(包含a)到b(不包含b)的所有字符;
deleteCharAt(int a) 只有一个参数,使用时删除索引为a的字符;
创建一个对象的时候,至少调用一个构造方法。比如在新建一个对象 new Object(),括号中没有任何参数,代表调用一个无参构造方法(默认构造方法就是一个无参构造方法)。构造方法的名称必须与类名相同,一个类可以定义多个构造方法。
隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别
如何去实现类的封装呢?
允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。多态也称作动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。
多态的实现条件:三个必要条件分别为继承、重写和向上转型(即父类引用指向子类对象)
多态的实现方式:继承父类进行方法重写,抽象类和抽象方法,接口实现。
定义类时,前面加上 abstract 关键字修饰的类叫抽象类。
何时用抽象类:
抽象类如何用代码实现呢:
TetePhone.java
public abstract class TelePhone {
public abstract void call();
public abstract void message();
}
CellPhone.java public class CellPhone extends TelePhone { @Override public void call() { // TODO Auto-generated method stub System.out.println("我要打电话!"); } @Override public void message() { // TODO Auto-generated method stub System.out.println("我要发短信!"); } public static void main(String[] args) { CellPhone ce=new CellPhone(); ce.call(); ce.message(); } }
用于描述类所具有的功能,而不提供功能的实现,功能的实现需要写在实现接口的类中,并且该类必须实现接口中所有的未实现方法。
实现代码:
interface Animal{
int y=5;
public void eat();
public void travel();
}
public class Cat implements Animal { @Override public void eat() { // TODO Auto-generated method stub System.out.println("猫在吃东西!"); } @Override public void travel() { // TODO Auto-generated method stub System.out.println("猫在玩耍!"); } public static void main(String[] args) { Cat cat=new Cat(); cat.eat(); cat.travel(); } }
将一个类的定义放在另一个类的定义内部,这就是内部类。而包含内部类的类被称为外部类。
内部类的主要作用如下:
成员内部类的使用方法:
// People.java //外部类People public class People { private String name = "LiLei"; //外部类的私有属性 //内部类Student public class Student { String ID = "20151234"; //内部类的成员属性 //内部类的方法 public void stuInfo(){ System.out.println("访问外部类中的name:" + name); System.out.println("访问内部类中的ID:" + ID); } } //测试成员内部类 public static void main(String[] args) { People a = new People(); //创建外部类对象,对象名为a Student b = a.new Student(); //使用外部类对象创建内部类对象,对象名为b // 或者为 People.Student b = a.new Student(); b.stuInfo(); //调用内部对象的suInfo方法 } }
静态内部类是 static 修饰的内部类,这种内部类的特点是:
// People.java //外部类People public class People { private String name = "LiLei"; //外部类的私有属性 /*外部类的静态变量。 Java 中被 static 修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。静态成员可以使用类名直接访问,也可以使用对象名进行访问。 */ static String ID = "510xxx199X0724XXXX"; //静态内部类Student public static class Student { String ID = "20151234"; //内部类的成员属性 //内部类的方法 public void stuInfo(){ System.out.println("访问外部类中的name:" + (new People().name)); System.out.println("访问外部类中的ID:" + People.ID); System.out.println("访问内部类中的ID:" + ID); } } //测试成员内部类 public static void main(String[] args) { Student b = new Student(); //直接创建内部类对象,对象名为b b.stuInfo(); //调用内部对象的suInfo方法 } }
指内部类定义在方法和作用域内。局部内部类也像别的类一样进行编译,但只是作用域不同而已,只在该方法或条件的作用域内才能使用,退出这些作用域后无法引用的。
// People.java //外部类People public class People { //定义在外部类中的方法内: public void peopleInfo() { final String sex = "man"; //外部类方法中的常量 class Student { String ID = "20151234"; //内部类中的常量 public void print() { System.out.println("访问外部类的方法中的常量sex:" + sex); System.out.println("访问内部类中的变量ID:" + ID); } } Student a = new Student(); //创建方法内部类的对象 a.print();//调用内部类的方法 } //定义在外部类中的作用域内 public void peopleInfo2(boolean b) { if(b){ final String sex = "man"; //外部类方法中的常量 class Student { String ID = "20151234"; //内部类中的常量 public void print() { System.out.println("访问外部类的方法中的常量sex:" + sex); System.out.println("访问内部类中的变量ID:" + ID); } } Student a = new Student(); //创建方法内部类的对象 a.print();//调用内部类的方法 } } //测试方法内部类 public static void main(String[] args) { People b = new People(); //创建外部类的对象 System.out.println("定义在方法内:==========="); b.peopleInfo(); //调用外部类的方法 System.out.println("定义在作用域内:==========="); b.peopleInfo2(true); } }
结果显示为:
$ javac People.java
$ java People
定义在方法内:===========
访问外部类的方法中的常量sex:man
访问内部类中的变量ID:20151234
定义在作用域内:===========
访问外部类的方法中的常量sex:man
访问内部类中的变量ID:20151234
顾名思义,就是没有名字的内部类。正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写。但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口。
匿名内部类是不能加访问修饰符的。要注意的是,new 匿名类,这个类是要先定义的, 如果不先定义,编译时会报错该类找不到。
package Method; public class Outer { public Inner getInner(final String name,String city){ return new Inner(){ private String nameStr=name; public String getName(){ return nameStr; } }; } interface Inner{ String getName(); } public static void main(String[] args) { Outer outer=new Outer(); Inner inner=outer.getInner("Inner", "NerYork"); System.out.println(inner.getName()); } }
结果显示为:
Inner
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。