面向对象加强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的
}
}