面向对象加强1

本文深入探讨了面向对象编程中的增强for循环、label语句及程序执行流程等高级概念,并通过具体实例展示了类的初始化、构造过程及变量初始化等方面的知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

面向对象加强1

1: 增强for循环
增强for循环主要用对数组、集合的遍历(只能读不能写)。优点是方便直观,但不会提高运行效率。

2:label语句
label可标识控制需要操作的任何有效语句,它被用来标识循环构造的复合语句(只能用来标识for、while或if之类的语句,其它的不行),和break或continue配合使用(continue和标签的配合很少用)。

aa:for(int i=0;i<20;i++){ 
      for(int j=0;j<20;j++){
         for(int k=0;k<20;k++){
             if(k==3*i+5*j-8){
                System.out.println("i="+i+",j="+j+",k="+k);
               break aa;//直接跳出当前标记的循环
            }
         }
      }
 }

3:程序执行流程分析
1.初始化一个类(对象),必须先初始化它的属性

public class Person {
    private String name="Jack";//4
    private int age=2;//5
    public Person() {//3 此处先执行super(...),再返回到当前类往下执行
        age=1000;//6
    }
    public static void main(String[] args) {//1
        Person p = new Person();//2
        System.out.println(p.name+","+p.age);//7
    }
}

4:分析程序的输出

2.构造一个类对象,必须先构造它的父类对象。
3.对super()的调用必须是构造方法中的第一个语句 。

public class Client {
    public static void main(String[] args) {
        T2 t = new T2();
    }
}

public class T1 extends Test2{
    {
        System.out.println("T1的属性");
    }
    public T1() {
        System.out.println("T1的构造方法");
    }
}

public class T2 extends T1{
    {
        System.out.println("T2的属性");
    }
    public T2() {//此处先调用super(...),再回到这里往下执行
        System.out.println("T2的构造方法");
    }
}

public class Test2 {
    public String s="111111";
    //实例块---执行时机等同于属性
    {
        System.out.println("Test2的属性");
    }
    public Test2(){
        System.out.println("Test2的构造方法");
    }
}

输出结果:
Test2的属性
Test2的构造方法
T1的属性
T1的构造方法
T2的属性
T2的构造方法

4. 程序执行顺序: 先静态(先父类再子类),,再非静态(先父类再子类)
整个程序执行期间,静态块只执行一次,,而且类模板对象只有一个。

public class Test3{
    static int i=5;
    public static void main(String[] args){

        Father father = new Child();
        father = new Child();
        System.out.println( (change()==3)?i+15:i+10.0 );
    }//低精度向高精度转换
    public static int change(){
        if(i==5){
            i = i+10;
        }
        return i = i/5;
    }
}
class Father{
    public Father(){
        System.out.println("father...");
    }
    static{
        System.out.println("father2");
    }
}
class Child extends Father{
    public Child(){
        System.out.println("child...");
    }
    static{
        System.out.println("child2");
    }
}

输出结果:
father2
child2
father…
child…
18.0

6:变量初始化问题
5.局部变量必须我们手动写代码初始化,否则不能直接使用
6.实例成员变量会自动初始化
7.类作用域的变量会自动初始化

import org.junit.Test;
public class Test4 {
    private int i;
    private static double a;
    @Test
    public void demo1() {
        int j;
        //int x=j+1; //WA
        int y=i+1; //AC 
        double z=a+1; //AC 
    }

    @Test
    public void demo2(){
        int x=60;
        int y=0;
        int z;

        if(x>50){
            y=9;
        }

        z=y+x; //如果第20行未给y赋初值,此处是WA的
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值