Java开发精华总结(第二章)


目录

条件语句

循环语句

static修饰符

final修饰符

abstract修饰符


 

条件语句


条件语句就是先通过某个条件的判断后再根据这个判断的结果决定去如何操作的语句。例如幼儿园班级选择我们就可以进行一条判断,判断小朋友的年龄是不是5岁,如果是5岁就可以上幼儿园小班。那么判断小朋友年龄就是一个条件,我们会根据这个条件判断出来的结果来进行不同的操作。

Java中的条件语句有if语句switch语句

如果if条件成立时的执行语句只有一句,是可以省略大括号的。但是如果执行语句有多条,那么大括号不可以省略。

if

if(条件){
    条件成立时执行的代码
}

if...else

if(条件){
    代码块1(条件成立时执行的代码)
}else{
    代码块2(条件不成立时候执行的代码)
}

多重if...else

if(条件1){
    代码块1(满足条件1的时候执行的代码)
}else if(条件2){
    代码块2(满足条件2的时候执行的代码)
}else{
    代码块3(条件1和条件2都不满足时执行的代码)
}

嵌套if(只有当外层if条件成立时,才会判断内层if的条件)

if(条件1){
    if(条件2){
        先满足条件1再满足条件2执行的代码
    }else{
        先满足条件1没满足条件2执行的代码
    }
}else{
    没满足条件1的时候执行的代码
}

switch语句

switch后面小括号中表达式的值必须是整型字符型

case后面的值可以是常量数值,也可以是一个常量表达式,但不能是变量或带有变量的表达式;

case匹配后,执行匹配块里的程序代码,如果没有遇见break会继续执行下一个case块的内容,知道遇到break语句或者switch语句块结束;

可以把功能相同的case语句合并起来;

default块可以出现在任意位置,也可以忽略不写。

switch(表达式){
    case 值1:
        执行代码块1
        break;
    case 值2:
        执行代码块2
        break;
    case 值3:
        执行代码块3
        break;
    default:
    默认执行的代码
}

 

 

循环语句


Java中常用的循环语句有while、do...while、for语句三种。

while语句特点是先判断后执行。

do...while语句是先执行后判断,所以do...while语句保证循环至少被执行过一次。

for语句相比于whle和do...while语句结构更加清晰易懂。

while循环

while(判断条件){
    循环操作
}

do...while循环

do{
    循环操作
}while(判断条件);

for循环

for(循环变量初始化;循环条件;循环变量变化){
    循环操作
}

foreach循环(增强for循环)

foreach适用于循环次数未知,或者计算循环次数比较麻烦情况下使用效率更高,但是更为复杂的一些循环还是需要用到for循环效率更高。foreach虽然能遍历数组或者集合,但是只能用来遍历,无法在遍历的过程中对数组或者集合进行修改,而for循环可以在遍历的过程中对源数组或者集合进行修改,这是foreach的局限性。

for (String name : names) {    循环names数组或者集合
       循环语句
 }

break语句

break语句的作用就是结束循环语句的执行,跳出循环。

continue语句

continue语句只能使用在循环语句内部,功能是跳过该次循环,继续执行下一次循环结构。

 

 

static修饰符


static是个关键字,中文意思是静态的,可以用来修饰属性、方法、代码块和内部类。

使用static修饰的内容是属于类的而不是属于对象的,所以static修饰的成员变量一般称作类成员变量(静态成员变量),而static修饰的方法一般叫做类方法(静态方法)。

 

static修饰符的特点

static修饰的属性、方法等内容随着所在类的加载而加载。当JVM把字节码加载到JVM的时候,static修饰的内容已经存在于内存中了;static修饰的内容优先于对象存在;static修饰的成员被该类的所有对象所共享(原理本质还是因为static修饰的成员可以通过类名访问);直接使用类名访问static成员,因此static修饰的成员只属于类不属于对象,可以直接使用类名访问static对象。

 

static修饰属性(类变量)

此时这个属性可以通过"类名.属性名"来访问,就是说这个属性成为该类的类变量,被类中所有对象所共享。

类加载的过程中类本身也是保存在文件中的(字节码文件保存着类的信息),java会通过I/O流把类的文件读入JVM,这个过程称为类的加载。JVM会通过类路径(CLASSPATH)来找字节码文件。需要的时候才会进行类加载,生成对象时是先加载后构造。类变量会在加载时自动初始化,初始化规则和实例变量相同。

注意:类中的实例变量是在创建对象时被初始化的。static修饰的属性是在类加载时被创建并进行初始化,类加载的过程只进行一次,也就是类变量只会被创建一次。

 

static修饰方法(静态方法)

static修饰的方法会使这个方法成为整个类所公有的方法,可以使用"类名.属性名"来访问。

static修饰的方法不能直接访问本类中的非静态成员,但本类的非静态方法可以访问本类的静态成员。

在静态方法中不能出现this关键字。

父类中是静态方法的子类中不能覆写成非静态方法,在符合覆盖规则的前提下,在父子类中,父类中的静态方法可以被子类中的静态方法覆盖,但是没有多态。

java中main方法必须写成static的原因:在类加载时无法创建对象,而静态方法可以不通过对象调用,所以在类加载时就可以通过main方法入口来运行程序。

 

static修饰初始代码块(静态初始代码块)

被static修饰的初始代码块就被叫做静态初始化代码块,这个代码块只在类加载时被执行一次。可以用静态初始化代码块初始化一个类。动态初始化代码块,写在类体重的"{ }",这个代码块是在生成对象时运行,这种代码块叫做动态初始化代码块。

 

 

final修饰符


final也是个修饰符,可以用来修饰变量、方法和类,final的意思是不可改变的。

被final修饰的变量会变成常量,一旦赋值就不能再改变了。

常量可以在初始化的时候直接赋值,也可以在构造方法里赋值,只有这两种赋值情况,而且不能不为常量赋值。常量不会有默认初始值。

常量赋值后不可改变的原因是锁定栈,使栈中的数据不可以改变。静态常量只能在初始化时直接赋值。

被final修饰的方法不能被重写。

被final修饰的类不能被继承。

final类中的方法也是final类型的;final不能用来修饰构造方法;使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。

 

final,finally,finalize的区别

final:用于声明属性,方法和类,分别表示属性不可变,方法不可重写,类不可被继承。内部类要访问局部变量,局部变量必须定义成final类型。

finally:是异常处理语句结构的一部分,是异常的统一出口,表示总是执行。

finalize:是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。JVM不保证此方法总被调用。

 

 

abstract修饰符


父类是将子类所共同拥有的属性和方法抽取出来,这些属性和方法中有的已经实现了,有的暂时还无法确定内容,那么我们就可以先把无法确定的内容(方法)定义为抽象的,在之后需要为它(抽象方法)确定内容的时候具体化内容,因此抽象这个概念就出现了。abstract修饰符表示抽象的,可以修饰类和方法。被abstract修饰的类和方法分别叫做抽象类抽象方法

抽象方法没有具体的方法体,它的作用就是等着子类继承后覆写,具体化内容。

抽象类是为了把子类所共有的但还没有具体内容的东西抽取出来,为了以后的使用定义成抽象的方法。拥有抽象方法的类一定是抽象类,但是抽象类中并不全是抽象方法,也可以拥有普通的方法。

 

抽象类

1.拥有抽象方法的类就是抽象类,抽象类用abstract关键字修饰;

2.抽象类不能被实例化,需要依靠子类采用向上转型的方式处理,必须被继承才能被使用。抽象类是用来创建继承动作中子类的模板,用来抽取子类中的通用特性的。抽象类必须拥有子类,使用extends继承,一个子类只能继承一个抽象类;

3.抽象类可以有构造函数,被继承时子类必须继承父类一个构造方法,抽象方法不能被声明为静态;

4.抽象类可以是外部类或者内部类,抽象外部类的抽象方法必须为public或者protected(因为如果是private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public;

5.子类(非抽象类)则必须覆写抽象类中的全部抽象方法,如果子类没有实现父类的抽象方法,则必须将子类也定义为abstract类(也是个抽象类(`・ω・´))。

 

抽象方法

在Java中用abstract修饰的方法就是抽象方法;

抽象方法只能在抽象类中声明不能在普通类中声明;

抽象方法只需要声明不需要实现,没有具体的方法体;

子类继承抽象类必须实现抽象类中的抽象方法。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值