Return ,continue ,break的区别
首先来说,break是结束循环,跳出循环体。
Continue是跳出本次循环,也就是说还会在循环体中,只是结束了这一次的循环,如果不是最后一次循环,则会继续下去(只结束一次循环,之后就继续循环)。
Return则是返回一个方法,就是说,这一个方法从什么地方被调用,就返回到什么地方。
String
String 是一个特殊的类。
String 在使用时,一般有2中方法(可以达到相同的效果):
1、直接赋值
String name=”图灵”;
//实例化String的一个实例化对象。当用输出语句输出name时,会打印图灵。
2、在main 方法中直接实例化传递参数。
String name=new String(“图灵”);
关于String的更多解释就以后再说吧。
对String 的比较:
对于String ,其实也可以用来声明基本数据类型。
一般使用equals方法来比较他们的内容是否完全相同。这是因为String 是引用数据类型,比较的是地址。
匿名对象(简单提一下,以后会有详细说明)
匿名对象在实际开发中基本都是作为其他类实例化对象的参数传递的,它实际就是一个堆内存空间,从这儿可以看出不管是匿名还是非匿名的对象,都是要用new 关键字来开辟一块内存空间的。
比如:new Dog(“哈士奇”);
这就是一个匿名对象。一般地,匿名对象在使用过后就会留在内存中等待被回收,可是这时候,我们要是用它来进行操作的话,并不会改变字符串中的值,只是重新给它分配了一块内存空间而已。这句话不仅仅适用于匿名对象,可以用在所有字符串上。
this
1、强调本类(在这个类中)
2、表示类中的属性(全局的,非局部)
3、可以使用this使用本类的构造方法。
构造方法是在实例化对象时被自动调用的,也就是说在类中的所有方法中,只有构造方法是被优先调用的,所以this调用构造方法时,要放在第一行。
4、表示当前对象。
注意:在比较 2个对象时候相等的时候,要比较他们的所有属性时候都相等,若所有属性都相等,那么这2个对象就相等。
static
声明属性:全局属性,(也叫静态属性,类属性),对所有对象共享。
对象对类属性的修改,在此时就可以看成是 你对一个电脑的文件夹进行改名字一样,它里面的那些文件或文件夹名字是不会变化的。而且在修改时,也可以直接用类名称进行修改,比如,Dog.color = ”black”;
声明方法:可以直接用类,来调用这个方法。在对象没有被实例化时,也可以用类名称来调用。
对象数组
声明:例子--->
People []peo =new People[3];//声明对象数组
Peo[0]=new People(“老王”);//实例化第一个元素
内部类
在一个类的内部定义的类,叫做内部类。外边那个类,叫做外部类。(此外的,不做说明。)
抽象类(专门用来做父类,不能直接创建对象,只能通过它派生出的类,在通过在个新的类来创建对象。)
1.包含抽象方法的类,必须是抽象类
2.抽象类和抽象方法都用abstract修饰
3.抽象方法只需声明,不用实现。
4.抽象类必须被子类继承,而且在子类不是抽象类的时候,子类必须要重写抽象类中所有的方法。
接口:由全局常量,公共的抽象方法组成的。可以被理解成一种特殊的类。
Interface接口名称{全局常量;抽象方法;}
实现接口(必须重写接口中所有抽象方法)
Class 子类 implements接口A,接口B,,,,,{}
因为接口的出现,也摆脱了JAVA单继承的局限性。
对象的多态性主要有:
1、向上转型()
子类对象---->父类对象
父类 父类对象=子类实例;
2、向下转型()
父类对象---->子类对象
子类 子类对象=(子类)父类实例;
注意:在向下转型时,必须先向上转型。
异常
编译时异常和运行时异常
Trycatch Finally throw throws
Throw和throws都是抛出异常,但不处理。一般用try catch finally来处理。
用户也可以自定义异常类(从Exception继承)
自定义异常的一个例子:
这里是一个向卡里存钱,然后取钱,当你输入取的钱的数目大于你目前的存款时,会抛出一个自己定义的异常。这里还用到了继承,抽象类方面的的知识,(其实是画蛇添足了)纯属是一种练习。
首先创建一个Account类
里面多声明了个name,因为存款的话,会有一个账户名,但是代码里面并没有实现判断用户名是否正确。不过用来演示异常就足够了。
public abstract class Account {
private int oldCunKuan;
private Stringname;
public int getOldCunKuan() {
return oldCunKuan;
}
public void setOldCunKuan (int oldCunKuan) {
this.oldCunKuan =oldCunKuan;
}
public String getName() {
return name;
}
public void setName(Stringname) {
this.name =name;
}
public Account() {//无参构造函数
}
public abstract void cunQian();//抽象类
public abstract void quQian(); //抽象类
}
接下来是User来实现抽象类的方法,我们叫它做实现子类。
import java.util.Scanner;
public class Userextends Account {
private int money;//要存进去的钱数。
Scanner sc =new Scanner(System.in);
@Override
public void cunQian() {
//TODO自动生成的方法存根
System.out.println("请输入存钱金额:");
this.money =sc.nextInt();
setOldCunKuan(this.money);
System.out.println("你的银行存款是:" + getOldCunKuan());
}
@Override
public void quQian() {
//TODO自动生成的方法存根
System.out.println("请输入取钱金额:");
this.money =sc.nextInt();
if (this.money > getOldCunKuan()) {
try {
throw new YuEBuZuException("你钱不够了~~~~~~~");
}catch(YuEBuZuExceptione){
//TODO自动生成的 catch块
e.printStackTrace();
}
}else{
System.out.println("你将取到" + this.money +"元");
}
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money =money;
}
}
还有一个自定义异常类“余额不足异常”。
@SuppressWarnings("serial")
public class YuEBuZuExceptionextends Exception {
public YuEBuZuException(Stringmessage){
//TODO自动生成的构造函数存根
super(message);
}
}
最后一个自然就是测试类。
package demo5_07; //我的包名
public class TestAccount {
public static void main(String[]args) {
//TODO自动生成的方法存根
User user=new User();
user.cunQian();
user.quQian();
}
}
实例化对象之后,调用2个方法。
可以看到,我们抛出了自己的异常了。