week_2_周总结

week_2_周总结

选择结构语句——switch

格式:
swithch(表达式){
case 值1:
	语句;
	break;
case 值2:
	语句2;
	break;
....
default:
	语句n;
	break;
}

switch后的表达式的数据类型可以是
	byte short int long 
	JDK5以后可以是枚举类型
	JDK7以后可以是String类型

case后面的值只能是常量,不能是变量

break:跳出选择结构

defaul的位置可以在switch结构语句体中的任何位置,需要注意的是default语句不在switch结构末尾时,必须要添加break语句;

switch可以利用case的穿透,来实现某种功能
例如:3,4,5月均是春季
完整结构:
	case 3: 
		System.out.println("春季");
		break;
	case 4: 
		System.out.println("春季");
		break;
	case 5: 
		System.out.println("春季");
		break;
	可以简化为:
	case 3: 
	case 4:
	case 5:
		System.out.println("春季");
		break;

循环结构语句——for

格式:
	for(初始化值;条件判断语句;步长语句){
		循环体语句;
	}
执行过程:先进行初始化,判断条件是否成立,成立则执行循环体语句,然后执行步长语句,在进行判断,如果不成立则循环体结束

for循环的嵌套:
	外层控制行,内层控制列
	例如:打印99乘法表
	public class summary {
        public static void main(String[] args) {
            for(int i = 1 ; i < 10 ; i++){
                for(int j = 1 ; j <= i ;j++){
                    System.out.print(j+"*"+i+"="+i*j+"\t");
                }
                System.out.println();
            }
        }
	}

循环结构语句——while

格式:
	初始化值
	while(表达式){
		循环体语句;
		步长控制语句;
	}
执行过程:先判断表达式是否成立,成立则执行循环体语句,在执行步长控制语句,再进行判断条件是否成立,不成立则结束循环
例如:珠穆朗玛峰8848,一张纸厚0.01m/折叠多少次后高于珠穆朗玛峰;
public class High {
    public static void main(String[] args) {
        int count = 0;
        double h = 0.01;
        while(h < 8848){
            h *= 2;
            count++;
        }
        System.out.println("折叠了"+count+"次");
    }
}

循环结构语句——do…while

格式:
do{
	循环体语句;
	步长语句;
}while(条件判断语句);
特点:无论条件是否成立,do{}中的语句都会执行一次

for、while、do…while的区别

常用的循环结构使用的时for循环
do...while循环与for循环和while循环的最大的区别:do...while至少执行一次
for循环和while循环的特点:
	for循环一般使用再已经循环次数的情况下,而当循环次数未知时,可以使用while循环
	for循环内部的变量在循环体结束之后无法访问,而while循环的循环执行结束后,还可以访问循环体中的变量

跳转控制语句——break

break:主要使用在switch选择结构中,和循环结构当中,用来结束switch结构和结束循环结构
	对于循环结构,如果循环嵌套时,break结束的是当前的循环体,也可以通过给外层循环结构设置标签来结束外层循环

跳转控制语句——continue

continue:使用在循环结构中
	作用:跳过当次循环,进入下一次循环当中

跳转控制语句——return

一般使用在有返回值的方法中,返回方法的结果

Java中定义方法的格式

有返回值的方法的定义

权限修饰符 静态修饰符 返回值数据类型 方法名(形参列表){
	方法内容;
	return 结果;
}

权限修饰符:public
静态修饰符:static
返回值数据类型
	基本数据类型:byte short int long float double char boolean 
	引用数据类型:数组/类/接口
方法名:小驼峰命名法,见名知意
形参列表:数据类型 变量名,数据类型 变量名,....
eg:
public static int num(int a,intb){
	int n = a + b;
	return n;
}

方法的调用:
	赋值调用:
		eg:int num = num(a,b);
	输出调用
		eg:System.out.println(num(a,b));

没有返回值方法的定义

权限修饰符 静态修饰符 void 方法名(形参列表){
	方法内容;
}
eg:
public static void printX(int a,intb){
	System.out.println("==============");
}

方法的调用:
	单独调用:
		eg:printX();

方法的重载

方法名相同,但是方法的参数类型和参数个数不同的这类方法称为方法的重载
eg:
public static void sum(){}
public static void sum(int a){}
public static void sum(double b){}
public static void sum(int a ,int b){}
public static void sum(int a,double b){}
这些都是方法重载

数组

数组由相同数据类型的多个数据组成

数组的定义

格式:
	数据类型[] 数组名称(推荐使用)
	数据类型 数组名称[]

数组的初始化

动态初始化:
	数据类型[] 数组名 = new 数据类型[数组长度];
	eg:int[] arr = new int[3];
	
静态初始化:
	数据类型[] 数组名 = new 数据类型[]{值1,值2,...}
	eg:int[] arr = new int[]{1,2,3,4};
静态初始化的简写格式:
	数据类型[] 数组名 = {值1,值2,...};
	eg:int[] arr = {1,2,3,4};

数组在内存中的存储

Java内存分配

栈内存:方法以及局部变量
堆内存:存储的时new创建的对象
方法区:字节码文件、main方法

本地方法区
寄存区

数组在内存中存储过程

例如:
int[] arr == new int[3];
首先在方法区运行字节码文件,加载主方法,进栈内存中创建int[] arr,然后在堆内存中创建new int[3]对象,将新创建的对象的堆内存空间地址赋给栈内存中的arr,并且对象一旦创建,arr链接的堆内存地址就固定不变了
	数组一旦创建,系统会自动为新创建的数组对象进行初始化

数组的简单应用

数组的遍历

public class PrintArray {
    public static void main(String[] args) {
        int[] arr = {15,25,31,54,75};
        printArray(arr);
        int max = maxArray(arr);
        System.out.println("最大值是:"+max);
        int min = minArray(arr);
        System.out.println("最小值是:"+min);
    }

    public static void printArray(int[] arr){
        System.out.print("[");
        for(int i = 0 ; i < arr.length; i++ ){
            if ( i == arr.length-1){
                System.out.println(arr[i]+"]");
            }else{
                System.out.print(arr[i]+", ");
            }
        }
    }
}

结果:
[15, 25, 31, 54, 75]

数组的最值

public class PrintArray {
    public static void main(String[] args) {
        int[] arr = {15,25,31,54,75};
        printArray(arr);
        int max = maxArray(arr);
        System.out.println("最大值是:"+max);
        int min = minArray(arr);
        System.out.println("最小值是:"+min);
    }

    public static void printArray(int[] arr){
        System.out.print("[");
        for(int i = 0 ; i < arr.length; i++ ){
            if ( i == arr.length-1){
                System.out.println(arr[i]+"]");
            }else{
                System.out.print(arr[i]+", ");
            }
        }
    }
    public static int maxArray(int[] arr){
        int max = arr[0];
        for(int i = 1;i < arr.length; i++){
            if(max < arr[i]){
                max = arr[i];
            }
        }
        return max;
    }
    public static int minArray(int[] arr){
        int min = arr[0];
        for(int i = 1;i < arr.length; i++){
            if(min > arr[i]){
                min = arr[i];
            }
        }
        return min;
    }
}

结果:
[15, 25, 31, 54, 75]
最大值是:75
最小值是:15

数组内元素的查找

public class PrintArray {
    public static void main(String[] args) {
        int[] arr = {15,25,31,54,75};
       int index = lookArray(arr,54);
        System.out.println("元素54对应的数组的索引值是:"+index);
    }

    public static int lookArray(int[] arr,int num){
        int index = -1;
        for(int i = 0 ; i < arr.length; i++ ){
           if(num == arr[i]){
               index = i;
           }
        }
        return index;
    }
}
结果为:
元素54对应的数组的索引值是:3

数组排序——冒泡排序

特点:相邻两元素之间进行比较,较大的后移
public class BubbleSort {
    public static void main(String[] args) {
        int[] arr = {95,25,12,26,8};
        printArray(arr);
        bubbleSort(arr);
        printArray(arr);
    }

    public static void printArray(int[] arr){
        System.out.print("[");
        for(int i = 0 ; i < arr.length; i++ ){
            if ( i == arr.length-1){
                System.out.println(arr[i]+"]");
            }else{
                System.out.print(arr[i]+", ");
            }
        }
    }
    public static void bubbleSort(int[] arr){
        for(int i = 0 ; i < arr.length-1; i ++){
            for( int j = 0; j < arr.length - 1 -i; j++){
                if(arr[j] > arr[j+1]){
                    int temp =arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
    }
}

结果:
[95, 25, 12, 26, 8]
[8, 12, 25, 26, 95]

数组常见的两个异常

ArrayIndexOutBoundsOfException :数组角标越界异常
NullPointerException:空指针异常

基本类型和应用类型作为参数传递时有什么特点

	基本类型作为参数传递时,形式参数的改变不会对实际参数产生影响,形式参数所在方法在栈内存运行完毕之后就消失了,不会对实际参数产生影响。
	当引用类型作为形式参数进行参数传递时会对实际参数产生影响,因为在内存中,引用类型的对象是存储在堆内存当中,而引用类型作为参数传递时传递的时对象在堆内存中空间地址,所以对形式参数的操作会直接影响实际参数的值

类和对象

类是java语言的最基本单元,描述的现实世界事物的属性和行为的集合
对象是类的一个具体的实例
例如:学生是一个类,而具体的张三是这个学生类的一个对象
类:	
	事物的属性称为成员变量
	事物的行为方法称为成员方法


类的创建:
	class 类名{
	成员变量;
	成员方法;
	}
对象的创建:
	类名 对象名 = new 类名();

成员变量的访问及赋值:
	对象名.属性名称 = 值;
成员方法的访问:
	对象名.成员方法名();
	例如:定义一个学生类,学生类的属性由姓名,年龄,性别;学生类的方法由学习,玩游戏
class Student{
	//定义成员变量
	String name;
	int age;
	String sex;
	//定义成员方法
	public void study(){
		System.out.println("学生的主要任务是学习!!!");
	}
	public void playGame(String game){
		System.out.println("学生可以玩"+game+"游戏");
	}
}
//定义测试类
public class StudentTest{
	public static void main(String[] args){
	//访问学生类必须要先创建一个学生类的对象
	Student stu1 = new Student();
	//为对象赋值
	stu1.name = "张三";
	stu1.age = 25 ;
	stu1.sex = "男";
	System.out.println(stu1.name+"---"+stu1.age+"---"+stu1.sex);
	//调用成员方法
	stu1.study();
	stu1.playGame("王者荣耀");	
	}
}

结果:
张三---25---男
学生的主要任务是学习!!!
学生可以玩王者荣耀游戏

Java语言面向对象的三大特征

封装  继承  多态

Java语言面向对象的思想特点是什么

更加符合现代生活的思想行为习惯
使复杂的事情简单化
由执行者转变为指挥者
	例如:

成员变量和局部变量的区别

书写位置不同:
	成员变量书写在类中方法外
	局部变量则是书写在方法声明上和方法内
内存中的存储位置和生命周期不同:
	成员变量是存储在堆内存当中,成员变量随着对象的创建而存在,当对象创建完毕,成员变量不会立即消失,会等待垃圾回收进行处理
	局部变量是存储在栈内存当中,随着方法的进栈而存在,随着方法的运行结束而消失
初始化方式不同:
	成员变量在对象创建时,系统会自动对成员变量进行初始化,不赋值也可以使用
	局部变量则必须要赋值才可以使用,否则程序会出现错误
	系统自动初始化,int类型的初始化值为0,String的初始化值null,boolean类型的初始化为false

当形式参数为类时,参数传递有什么特点

当形式参数为类时,同数组作为形式参数进行传递时类似,传递的时对象在堆内存的空间地址,对形式参数进行操作时也会对实际参数产生影响,但是类中的String类是一个特殊的类,String类作为形式参数传递时,同基本类型作为形式参数传递时是一样的,对形式参数的操作不会对实际参数的值产生影响。

匿名对象的创建

完成对象的格式:
	类名 对象名称 = new 类名();
匿名对象的格式:
	new 类名();
特点:使用完毕后会立即被回收,一般只使用一次,不多次使用,同时也可以作为参数传递

封装

将类的属性私有化,对外提供共有的访问方法,提高程序的安全性
通过关键字private来实现
被private修饰的成员变量和成员方法只能在本类中访问,外界无法访问,因此需要在类中创建公共的访问方法来访问成员变量和成员方法
	通过setXxx()来给成员变量赋值,通过getXxx()来获取成员变量的值
	eg:创建一个学生,设置属性私有化,并定义公共的方法进行访问
package com.pj.summary;

class Student{
    //定义成员变量,属性私有化
    private String name;
    private int age;
    private String sex;
    //创建共有的访问方法
    //定义给name赋值的公共访问方法
    public void setName(String n){
        name = n;
    }
    //定义获取name的公告公共访问方法
    public String getName(){
        return name;
    }
    public void setAge(int a){
        age = a;
    }
    public int getAge(){
        return age;
    }
    public void setSex(String s){
        sex = s;
    }
    public String getSex(){
        return sex;
    }

    //定义成员方法,方法私有化
    private void study(){
        System.out.println("学生的主要任务是学习!!!");
    }
    private void playGame(){
        System.out.println("学生可以玩游戏");
    }
    //通过共有的方法进行访问
    public void show(){
        study();
        playGame();
    }
}
//定义测试类
public class StudentTest{
    public static void main(String[] args){
        //访问学生类必须要先创建一个学生类的对象
        Student stu1 = new Student();
        //为对象赋值
        stu1.setName("张三");
        stu1.setAge(25);
        stu1.setSex("男");
        System.out.println(stu1.getName()+"---"+stu1.getAge()+"---"+stu1.getSex());
        //调用成员方法
        stu1.show();
    }
}
结果:
张三---25---男
学生的主要任务是学习!!!
学生可以玩游戏

this关键字

在上面定义共有的访问方法时,共有方法中的变量名不符合标识符的命名规则,但是如果按照标识符的命名规则进行命名的话,在公共有的访问方法中会出现
	public void setName(String name){
		name = name;
	}
	这样就无法区分成员变量和形式参数传递的变量,造成形参变量将成员变量覆盖的现象,因此,提供this关键字来区分成员变量和形参变量;
	this:this代表当前类的对象的引用地址
	格式:this.成员变量 = 形参变量;
上述的共有方法的定义可以更改为:
 //定义获取name的公告公共访问方法
    public String getName(){
        return name;
    }
    public void setAge(int age){
        this.age = age;
    }
    public int getAge(){
        return age;
    }
    public void setSex(String sex){
        this.sex = sex;
    }
    public String getSex(){
        return sex;
    }
上一篇:ARTS Week 21


下一篇:什么是SEO服务,企业为什么要做SEO?