JAVA学习---从头开始week02

循环语句

for循环:

使用最多,求和思想,统计思想
格式:

for(初始化语句;条件表达式;控制体语句){
           循环体语句;
           }

eg:

for(int x=1;x<=10;x++){
       System.out.println("你在哪,我想你!")
       }

执行流程:1)初始化语句:给变量赋值
2)执行条件表达式,看其是否成立.成立执行循环体语句------再次执行控制体语句--------变量自增或自减
3)再次执行条件表达式,成立执行循环体语句------再次回来控制体语句------变量自增或自减
4)执行到条件表达式不成立,for循环语句
典型例题:
在控制台输出所有的水仙花数.
注:水仙花数指的是三位数,且这个三位数每一个位上的立方相加就是这个数本身.
举例:153 = 1 * 1 * 1 + 555 + 333

              153  % 10  = 3 ;---确定个位的数据
              153 / 10  % 10  = 5 --- 确定十位的数据
             153 /10 /10 %10 = 1 --- 确定百位上的数据

分析

  •        1)三位数,明确了范围 100-999---使用for循环       x
           2) 确定每各位的数据本身的值:
                       定义三个变量,分别代表个位,十位,百位数据本身
                        int ge = 当前这个数据 % 10 ;
                        int shi = 当前这个数据 /10 %10 ;
                        int bai = 当前这个数据 /10/10 % 10 ;
           3)for循环中加入逻辑判断
                        如果当前x  == (ge*ge*ge)+(shi*shi*shi)+(bai*bai*bai),
                        满足条件,直接输出x
    

代码展示:

package com.qf.for_02;
public class shuiXianHua {
    public static void main(String[] args) {
        System.out.println("水仙花数是:") ;

         // 1)三位数,明确了范围 100-999---使用for循环      
        for (int x = 100; x < 1000; x++) {
            //x:100-999的数据
            //确定每各位的数据本身的值:
            // 定义三个变量,分别代表个位,十位,百位数据本身
            int ge = x %10 ; //x=153
            int shi = x /10 %10 ;
            int bai = x /10 /10 % 10;

            //如果当前x  == (ge*ge*ge)+(shi*shi*shi)+(bai*bai*bai),满足条件,直接输出x
            if(x==(ge*ge*ge+shi*shi*shi+bai*bai*bai)){
                System.out.println(x) ;
            }
        }
    }
}

for循环的综合运用(for循环嵌套)
格式: for(初始化语句1;条件中表达式1;控制体语句1)
{ //外层循环
// 循环体语句又是一个for循环
for(初始化语句2;条件表达式2;控制体语句2) {
循环体语句…
}
}
eg:

for(int x = 0 ; x < 5 ; x ++){//外层循环 x=0,1,2,3,4  5行
            for(int y = 0 ; y < 5 ; y ++){//内层循环: y=0,1,2,3,4  5列
                System.out.print("*");
            }
            System.out.println();

例题:打印九九乘法表:

package com.qf.forfor_03;
public class ForForDemo2 {
    public static void main(String[] args) {
 for(int x = 1 ; x <= 9 ; x++){ //9行
         for(int y = 1 ; y<=x ; y ++){//列数随着x的变化而变化
//Java中 转移字符 "\t"---->制表符 相当于tab 缩进空格
         System.out.print(x +"*"+y+"=(y*x)+"\t");
                //1*1=1
                //2*1=2  2*2=4
                //3*1=3  3*2=6  3*3=9
                //
           }
            System.out.println();//换行

        }

while循环

格式:
初始化语句
while(条件表达式){
循环体语句;
控制体语句
}
执行流程: 1)先初始化语句对变量进行赋值
2)执行条件表达式,成立执行循环体语句之后执行控制体语句对变量进行控制
3)再次判断条件表达式是否成立,成立执行循环体语句------执行控制体语句进行变量控制
4)当条件表达式不成立,while循环结束
注:控制体语句不能忘记,否则进入死循环
eg: `

int a=1;
           while(a<=5){
           System.out.println("还好吗")
           a++
           } 

例题:求1-100之间的和
求1-100之间的偶数和

package com.qr.while
public class WhileTest {
    public static void main(String[] args) {
    int sum =0;
    int a = 1;
    while(a<=100)
    sum +=a;
    a++;
    }
    System.out.println("1-100之间的和为:"+sum);
    //输出语句中sum前的+为拼接符号,不是加号
    //求偶数和
    int result = 0 ;
        //初始化语句
        int num = 1 ;
        while(num<=100) {
            //循环体
            if(num %2 ==0){//能被2整除说明是偶数
                result += num ;
            }
            num ++;
        }
        System.out.println("1-100之间的偶数是:"+result);

for循环和while循环的区别:

共同点:都是能够体现循环思想,解决代码冗余问题
不同点:
1)格式不同
for(初始化语句;条件表达式;控制体语句){
循环体语句;
}
初始化语句;
while(条件表达式){
循环体语句;
控制体语句;
}
2)使用场景不同
for循环(普通for循环),明确循环次数优先采用for (实际开发中for使用很频繁:遍历数组,获取数组的元素)
后期学习特殊for循环(增强for循环—>集合 中使用频繁的)
while循环: 不明确循环次数使用while循环
3)从内存角度是否节省内存
for循环的这种格式,比较节省内存资源,当for循环结束,里面的变量被释放了,
这个变量作用域就在 for(初始化语句;条件表达式;控制体语句){
循环体语句;
}
while循环,相对for循环,比较消耗内存,当while循环,依然能够访问变量
switch语句
格式:

           switch(表达式或者某个变量值){
			case1:
			语句1;
			break ;
			case2:
			语句2:
			break ;
			...
			default:
			语句n;
			break ;
			}

执行流程:
switch接收结果,
1)接收的结果和case后面的值1进行对比,成立,执行语句
1,break 结束语句;
2)值1和switch接收的结果不匹配,和值2进行比较,成立,执
行语句2, break,结束语句;*
3)…
如果上面case都不匹配,执行default语句,语句n,break ,结束.
例题:
/键盘录入一个值,判断星期
//* 1,星期一
//* 2,星期二
//* 3,星期三,
//* 4,星期四
//* 5,星期五
//* 6,星期六
//* 7,星期日

package com.qf.switch_01;

import java.util.Scanner;
public class SwitchDemo2 {

    public static void main(String[] args) {
        //创建键盘录入对象
        Scanner sc = new Scanner(System.in) ;

        //提示并录入数据
        System.out.println("请输入一个星期(1-7的数据): ") ;
        int week = sc.nextInt() ;

        int b = 2 ;


        switch (week){
            default:
                System.out.println("非法数据");
                //break ; //如果default在语句中,break不能省略,否则case穿透
            case 1:
                System.out.println("星期一") ;
                break ;
            //case b: //需要的是常量表达式,不能是变量
            case 2:
                System.out.println("星期二") ;
                break ;
            case 3:
                System.out.println("星期三") ;
                break ;
            case 4:
                System.out.println("星期四") ;
                break ;
            case 5:
                System.out.println("星期五") ;
                break ;
            case 6:
                System.out.println("星期六") ;
                break ;
            case 7:
                System.out.println("星期日") ;
                break ;
            //default ://语句末尾
              //System.out.println("非法数据") ;
                //break ;  //可以省略,但是不建议;

        }
    }
}

注意事项(考点):
1)关于switch中的case语句后面只能常量,不能是变量 (体现Java是一种强类型语言)
----前端的javascript(弱类型语言):它里面的swtich的case是可以是变量,可以是个常量
2)在书写switch语句的标准结构,不忘了break,如果语句中忘了书写break,会出现一个现象:case穿透! 在有的需求里面利用 case穿透 来完成一些需求;
3)关于switch语句的结束条件
a)要么遇见break结束
b)程序默认执行到末尾

4)关于default语句可以在switch语句中的任何位置,不影响语句的执行流程;
不管在任何位置,只要case语句都不匹配,执行default;
如果default语句在语句中,break不要省略
如果default语句的末尾,break可以省略;0
.switch语句后面的表达式可以是什
么数据类型?

可以跟的基本数据类型 byte,short ,int ,char
jdk5以后,可以枚举类型
jdk7以后,可以String类型.
死循环的两种格式

        for(;;){
         循环体语句;
         }

        while(true){ //死循环格式中使用比较多
        循环体语句;
          }

break和contine的笔试题
for(int x= 1 ; x <=10;x++){
if(x %3==0){
//补全代码
}
System.out.println(“你好”);
}
1)需要在控制台输出 2次"你好" break
2)需要在控制台输出7次"你好" continue
3)需要在控制台输出13次"你好"
System.out.println(“你好”);

Java中的方法

方法:给某段代码,使用{}包裹起来,给这个{}起一个名字,方法名,就可以有相同业务逻辑代码,直接使用方法名调用,提高代码的复用性;

有具体返回值方法的定义格式
固定写法:
public static 返回值类型 方法名(形式参数类型1 参数名1,形式参数类型2 参
数名2,…){
//完成功能业务逻辑…
return 具体结果;
}
有具体返回值类型的方法的调用格式
在main方法中赋值调用
接收的结果类型 变量名 = 方法名(实际参数1,实际参数2,…) ;
实际参数:直接赋值或者main中键盘录入.

需求:
键盘录入两个数据,完成两个数据比较,获取最大值 ,使用方法改进
分析:

  •          1)定义一个方法:求和的方法,  两个数据
                    心中两个明确:
                   a)明确方法返回值类型  int
                   b)明确形式参数类型以及参数个数
                            两个参数:都是int
    
  •   public static 返回值类型  方法名(形式参数类型1 参数名1,形式参数类型2 参数名3....){
     //方法功能
                return 结果;
                    }
    
  •  有具体返回值的方法定义完成之后,需要调用方法
        1)单独调用,不适用于有具体返回值的方法
        2)输出调用 ,可以,直接调用写好的方法,直接输出,没有意义
        3)赋值调用 推荐的方式, 因为可以用调用的方法的结果值,继续完成其他业务操作;
    

    接收的结果类型 变量名 = 方法名(实际参数1,实际参数2,…) ;
    在main方法中,直接写我们定义好的方法名

package com.qf.function_05;

import java.util.Scanner;

/**
 *  2)键盘录入两个数据,完成两个数据比较,获取最大值 ,使用方法改进
 */
public class FunctionTest2 {
    public static void main(String[] args) {

        //创建键盘录入对象
        Scanner sc = new Scanner(System.in) ;

        //提示并录入数据
        System.out.println("请您输入第一个数据:") ;
        int firstNum = sc.nextInt() ;

        System.out.println("请您输入第二个数据:") ;
        int secondNum = sc.nextInt() ;

        //调用比较两个数据,获取最大值
        int max = getMax(firstNum, secondNum);
        System.out.println("两个数据的最大值是:"+max) ;
    }

    /**
     * 定义一个获取两个数据最大值的方法
     * 两个明确
     *      1)明确返回值类型
     *              int
     *      2)明确参数类型以及参数个数
     *              分别都是int,两个
     */
    public static int getMax(int a,int b){ //形式参数

        //定义最终结果变量
        int max ;
        //逻辑
        
        //if...else if...else...
        if(a>b){
            //将a赋值给max
            max = a ;
        }else if(a==b){
            //a和b的相等
            max = a=b ;
        }else{
            //b大
            max = b ;
        }*/
        /*if(a>b){
            //将a赋值给max
            max = a ;
        }else{
            //b大
            max = b ;
        }*/


        return  max ;

    }
}

定义方法的注意事项

  • 1)方法和方法是平级关系,不能够在一个方法中定义另一个方法,只能在一个方法中调用另一个方法
  • 2)在定义方法的时候,方法中的形式参数必须带上数据类型,因为Java是一个强类型语言;
  • 3)调用方法的时候,实际参数不需要带数据类型;
  • 4)在定义方法的时候,有{的地方不能分号;,有分号;的地方不能{

无具体返回值类型的方法定义和调用

  • 当某个业务逻辑里面比如完成的数据的直接输出,展示数据----
    System.out.println(“xxx”) ;
    或者:

  • 业务逻辑中可能数据某个数据在进行排序 数据交换

  • 这种方法在定义的时候,

  • 还有是遵循有具体返回值类型的方法定义格式:
    *没有没有具体的结果是直接输出在控制台上,

  • 此时java提供了一个关键字 void,代替返回值类型(Java定义方法语法的要求:需求没有具体返回结果,就是用void)
    格式:
    public static void 方法名(形式参数类型1 参数名称1,
    形式参数类型2 参数名2,…){
    }

    调用格式
    单独调用
    举例
    public static void getMax(int a,int b){
    //完成逻辑判断
    //举例
    if(a>b){
    System.out.println(a+“是最大值”);
    }else{
    System.out.println(b+“是最大值”);
    例题:
    键盘录入三个数据,比较三个数据最大值

package com.qf.function_01;

import java.util.Scanner;

public class FunctionTest2 {

    public static void main(String[] args) {
        //创建键盘录入对象
        Scanner sc = new Scanner(System.in) ;

        //键盘录入三个数据,比较三个数据最大值
        //提示并录入数据
        System.out.println("请输入第一个数据:");
        int a = sc.nextInt() ;

        System.out.println("请输入第二个数据:");
        int b = sc.nextInt() ;

        System.out.println("请输入第三个数据:");
        int c = sc.nextInt() ;
        //:有返回结果的方法调用
        int max = getMax(a,b,c) ;
        System.out.println("三个 数据的最大值是:"+max);

        System.out.println("----------------调用没有返回值类型的方法--------------------") ;
        getMax2(a,b,c);
    }
    //无返回值:直接在方法中输出结果
    public static void getMax2(int a,int b,int c){
        if(a>b){
            if(a>c){
                System.out.println(a+"是最大值") ;
            }else{
                System.out.println(c+"是最大值") ;
            }
        }else{
            if(b>c){
                System.out.println(b+"是最大值");
            }else{
                System.out.println(c+"是最大值");
            }
        }
    }

    //有返回值
    public static int getMax(int a,int b, int c){
        int max ;  //声明这个变量max
        if(a>b){
            if(a>c){
                max = a ;
            }else{
                max = c ;
            }
        }else{
            if(b>c){
                max = b ;
            }else{
                max = c ;
            }
        }
        return  max ;
    }

方法重载

什么是就是方法重载?(overload)
方法重载:为了某个功能扩展性,多个方法方法名完全相同,参数列表不同,与返回值无关

  • 参数列表不同
    1)参数个数不同
    2)参数类型不同
    3)参数类型的顺序
package com.qf.overload_02;

import java.util.Scanner;

/**
 * 需求:比较两个数据是否相等
 *
 * 满足2个类型,
 *      两个int类型进行比较
 *      两个double进行比较
 */
public class OverLoadTest {
    public static void main(String[] args) {

        //定义两个变量
        int a = 10 ;
        int b = 20 ;

        double x = 12.56 ;
        double y = 12.56 ;
        //重载方法
        boolean flag = compare(a, b);
        boolean flag2 = compare(x, y);
        System.out.println(flag) ;
        System.out.println(flag2) ;
    }
    //两个int类型进行比较
    public static boolean compare(int a,int b){
        return  a==b ;
    }
    public static boolean compare(double a,double b){
        return  a==b;
    }
}

数组

Java中数组就是容器,这个容器 “只能存储同一种类型的元素”

  • 在数组中定义格式

  • 动态初始化和静态初始化

  • 动态初始化:自己定义数组的长度,数组的元素有系统(jvm)默认分配
    *格式:
    数据类型[] 数组名称 = new 数据类型[数组长度] ;
    数据类型 数组名称[] = new 数据类型[数组长度] ;
    eg:
    int[] arr = new int[3] ;
    * int arr[] = new int[3] ;
    静态初始化:直接我们自己给定的了元素内容,数组的长度由系统默认分配
    *原生的格式写法:

  • 数据类型[] 数组对象名 = new 数据类型[]{元素1,元素2,元素3…} ;

  • 数据类型 数组对象名[] = new 数据类型[]{元素1,元素2,元素3…} ;

  • 举例

  • int[] arr = new int[]{1,2,3} ;

  • int arr[] = new int[]{1,2,3} ;

  • 静态初始化的简写格式

  • 数据类型[] 数组对象名 = {元素1,元素2,元素3…} ; 推荐的写法

  • 数据类型 数组对象名[] = {元素1,元素2,元素3…} ;

  • int[] arr = {1,2,3} ;(推荐)

  • int arr[] = {1,2,3} ;
    在数组中有一个特有的属性:length

  • 数组名称.length:获取数组长度

  • 数组中的最大索引值: 数组名称.length-1

数组的应用
已知一个数组:静态初始化了,现在需要把数组的元素遍历出来
遍历:将数组的元素一一打印出来;

package com.qf.array_03;
public class shuzu {
    public static void main(String[] args) {
//定义一个方法
    public static void printArray2(int[] array){ //形式参数
        //业务逻辑
        //[元素1, 元素2, 元素3, 元素4,  ....]
        System.out.print("[");  //[元素1, 元素2,,,
        //遍历array数组
        for(int x =0 ; x < array.length ; x ++){ //x角标
            //这个角标如果取到了最大角标----  最后一个元素 ,直接输出这个元素内容同时拼接 右]
            if(x== array.length-1){
                System.out.println(array[x]+"]");
                            // 最后一个元素]
            }else{
                //如果不是最后一个角标----  取到的中间的元素,直接输出元素的内容 同时拼接 ", "
                System.out.print(array[x]+", ");
            }
             }
          }

        }

   
    //定义一个方法:   遍历:将数组的元素一一打印出来;
    /**
     * 两个明确
     *      明确返回值类型 void
     *      明确参数类型 以及参数个数
     *                  引用类型的数组, 1个数组
     */
    public static void printArray(int[] array){//需要传递的数组对象
        for(int x = 0 ; x < array.length ; x ++){
            System.out.println(array[x]);
        }
    }
}

创建一个数组的注意事项
初始化的时候不能动静结合: 不能够同事动态和静态初始化,只能有一种

面试题
int[] array = new int[3] ; 这句话完了哪些事情? ----内存干了什么事

1)需要在栈内存中开辟 空间, int[] array这个变量
2)new int[3] ; 需要在堆内存中申请空间
3)为这个堆内存中的这些数组的元素,进行系统默认初始化,int类型的元素在
数组中默认值0
4)系统初始化完毕,为堆内存空间产生一个空间地址值,
5)将堆内存空间地址值赋值给栈内存的变量array
6)栈内存变量 array指向堆内存地址;

数组的其他基本应用

  • 最值问题 (最大值/最小值),结合方法完成
    已知一个数组,静态初始化,完成获取数组中最大值
    *分析:

  • int[] array = {65,45,76,87,13} ;
    1)定义一个参照物 array[0]就是最大值
    2)从角标1开始遍历数组的其他元素
    3)判断:使用后面的元素依次和参照物比较
    如果后面元素比参照物,将最大值修改了
    4)获取最大值;

package com.qf.array_01;
public class ArrayDemo {
    public static void main(String[] args) {
        //创建一个数组静态初始化
        int[] array = {65,45,76,87,13} ;
        //调用最大值
       int max = getArrayMax(array) ; //实际参数
        System.out.println("max2:"+max2);
        调用最小值
        int min = getArrayMin(array);
        System.out.println("min:"+min);
        //最大值
         public static int getArrayMax(int[] arr){
         //1)定义参照物
        int max  = arr[0] ;
          //2)从角标1开始遍历数组,获取每一个元素
        for(int x = 1 ; x < arr.length ; x ++){
            //判断
            if(arr[x] > max){
                //将后面的元素赋值给max
                max = arr[x] ;
            }
        }
        return  max ;
     System.out.println("-----------------------------------------") ;
      /**
     * 定义一个方法, 获取数组最小值
     *  两个明确
     *          1)明确返回值类型 int
     *          2)明确参数类型以及参数个数
     *                  int[] /1个参数
     *
     */
    public static int getArrayMin(int[] arr){
        //定义一个参照物 是最小值
        int min = arr[0] ;
        //从角标1开始遍历数组
        for (int i = 1; i < arr.length; i++) {
            //判断
            //如果后面的元素比min还小,后面的元素是最小值
            if(arr[i] < min){
                min = arr[i] ;
            }
        }
        return  min ;
    }

需求:

  • 已知一个数组,静态初始化了,查询数组中某个元素的索引值/查询具体的元素
    int[] arr = {69,57,13,24,87} ; //查询13这个元素第一次出现的索引值
    //133元素

      分析:
           1) 定义一个方法
                  方法的返回值 int
                  方法的参数类型和参数个数
                   int[],查询的具体的元素   2个参数
          2)
                遍历数组,获取所有元素
                判断:如果要查询的元素和数组的中元素一致,就找到了
                          返回角标值
    
public class ArrayDemo3 {

    public static void main(String[] args) {

        //已知这个数组:
        int[] arr = {69,57,13,24,87} ;

        int index = getIndex(arr, 13);//找13
        System.out.println("index:"+index);
       
        int index2 = getIndex(arr, 133);//找13
        System.out.println("index2:"+index2);

     public static int getIndex2(int[] array,int    target){
        //1)先定一个变量index:表示索引值
        int index = -1 ; //假设角标找不到

        //2)遍历数组array
        for(int x = 0 ; x <array.length ; x ++){
            //获取到每一个元素array[x]
            //如果 target  == array[x]:找到了,
            if(target==array[x]){
                //将index修改
                index = x ;
                break ;
            }
        }
        return  index ;
    }
    //查询具体的元素
    public static int getIndex(int[] array,int target){//array:传递一个数组,target:查询目标元素
        //遍历数组,获取所有元素
        for(int x = 0 ; x < array.length; x++){
            //array[x]:每一个元素就可以获取到
            //判断
            //如果array[x] 和target 相等,就找到了,x返回
            if(target == array[x]){//考虑找到的情况
                return  x ;
            }
        }

        //查询数组:找不到元素,返回负数  -1
        return  -1 ;
    }
    }

冒泡排序

package com.qr.demo;

public class maopao {
    public static void main(String[] args) {
        int[] arr={45,89,54,82,96,34,25,20,0};
        System.out.println("排序前:");
        bian(arr);
        System.out.println("排序后:");
        maopao(arr);
        bian(arr);

    }
    //遍历
    public static void bian(int[] arr){
        System.out.print("[");
        for(int a=0;a< arr.length;a++){
            if(a == arr.length-1){
                System.out.println(arr[a]+"]");
            }else{
                System.out.print(arr[a]+", ");
            }
        }
    }
    //冒泡排序
    public static void maopao(int[] arr){
        for(int a=0;a< arr.length-1;a++){
            for(int b =0;b< arr.length-1-a;b++){
                if(arr[b]>arr[b+1]){
                    int temp = arr[b];
                    arr[b] = arr[b+1];
                    arr[b+1]=temp;
                }
            }
        }
    }
}

jvm的内存分配

  •    1)栈内存 :存储的就是局部变量
       2)堆内存 :以后 new出来的东西都在堆中  (new :创建对象)
       3)方法区 :
                  xxx.class :字节码文件区域
                  后面static区域
                  常量池区域.
        4)寄存器    
        5)本地方法区--->     都和cpu和系统相关的
    

Java内存分配

创建一个对象的内存图解
创建多个数组对象内存图解_
**

面向对象

面向对象思想特点是什么?

特点:
1)更符号生活中的思想行为习惯
2)让复杂的事情简单化
3)从执行者变成了指挥者

面向对象的三大特征:

  • 封装
  • 继承
  • 多态

什么是类
类,是能够描述现实世界事物一组属性和行为的集合;
类和事物的关系:一一对应的关系
事物:一定现实真实存在的

  • 学生事物属性: 姓名,身高, 年龄 等等…
  • 行为: 主要目的学习…

Java中规定,需要定义类描述这个事物 ,Java中最基本单元就是类
代码体现 描述哪一个事物
class 类名{ //类名:满足标识符的规范: 见名知意 }

class Student{ 
//在代码体现出这个学生的属性 : 
//成员变量: 
}

.基本类型作为形式参数和引用类型(数组,类,接口) 作为形式参数的特点?(重点)
实际需求业务中,数组这种在后期用的不是很多,用的"集合" List,Set,Map(高级集合特性),支持长度可变的需求;

基本类型作为形式参数,形式参数改变不影响实际参数;
引用类型作为形式参数,形式参数的改变直接影响实际参数;

.类
描述现实世界事物的一组属性和行为,代码体现出来对某个事物的描述以及在对应的主方法中测试;

1)手机有品牌(brand),价格,颜色,内存等属性,
手机可以打电话,发短信,打游戏等行为,
请使用面向对象的方式描述手机并且进行定义一个PhoneTest类,在主方法中测 试手机类
2)学生有姓名,年龄,性别属性
学生主要行为就是学习,还可以玩游戏,
请使用面向对象的方式描述学生类并且定义一个StudentTest类,在主方法中测 试学生类

封装(关键字 权限修饰符—private)
如果学生的年龄,手机价格,赋值的时候可以随便赋值,可能出现非法数据"负数"
以后:描述事务的时候,需要定义类,类中的所有的成员变量(现实世界事物的属性) ,必须都是私有化private;

  • 封装:
    就是将显示世界事物的属性隐藏了(加入一个关键字private),
    私有的,无法直接访问的,对外数据的安全性!(外界不能访问的)
    对外提供一个方法,公共的(public)访问方法(setXXX()/getXXX())

注意事项:
以后在书写的代码的时候,写一个类,描述真是存在事物的属性的时候, 需要属性(英文单词字母全部小写)全部加入private

  • 面试题*: private关键字的特点?
    1)被private修饰的成员变量以及成员 方法只能在本类中访问
    2)可以修饰成员变量也可以成员方法,就是为了外 界不能直接访问
    3)被private修饰的成员变量/成员方法可以间接的通过通过的方法访问;
package com.qf.private_05;

//定义一个学生类:来描述学生事物
public class Student {

    //被private修饰的成员变量:只能在本类中访问,外界不能访问
    //属性私有化
    private String name ; //姓名
    private int age  ;  //年龄
    private String sex ;//性别

    //手写 ---公共的访问方法:给姓名,年龄,性别 赋值
    //setXXX():XXX就是属性名称 ,符合标识符的规范
    public void setName(String n)  { //方法需要形式参数: 等会传递"高圆圆"
           name =  n ;//把n的值赋值给成员变量name
    }

    //给年龄赋值
    public void setAge(int a){
        age = a ;
    }
    //给性别赋值
    public void setSex(String s){ //"女"
        sex = s ; //sex = "女"
    }

    //提供公共的getXXX():获取姓名,年龄,性别
    //获取姓名
    public String getName(){
        return name ;
    }
    //获取年龄
    public int getAge(){
        return  age ;
    }

    //获取性别
    public String getSex(){
        return  sex ;
    }


    //成员show(),来展示学生信息
   /* public void show(){
        System.out.println("学生的姓名是:"+name+",年龄是"+age+",性别是:"+sex);
    }*/

    //学习JavaSE
    public void studyJavaSE(){
        System.out.println("正在学习JavaSE之面向对象oop") ;
    }
    // 会敲代码
    public void codding(){
        System.out.println("每天日日夜夜敲代码...") ;
    }



}
package com.qf.private_05;

/**
 * 描述学生事物,
 *      学生事物有两个属性,姓名和年龄,性别
 *      定义成员show(),来展示学生信息
 *
 *      学生的行为: 学习JavaSE , 会敲代码
 *
 *      使用面向对象的方式,加入封装思想来测试学生事物
 *
 *    分析:
 *          学生事物----- 定义学生类
 *         1)分析属性
 *         姓名,                 String name;
 *          年龄,                 int age ;
 *          性别                  String sex ;
 *
 *                      类中成员变量(属性),全部私有化加入private
 *          2)分析事物行为:
 *          对外提供一个方法,公共的(public)访问方法(setXXX()/getXXX())
 *
 *              成员show(),来展示学生信息            public void show(){输出name,age,sex}
 *              学习JavaSE , 会敲代码               public void studyJavaSe()
 *                                               public void codding() 敲代码
 *
 */
public class StudentTest {
    public static void main(String[] args) {


        //描述具体的学生---创建学生对象 :类名 对象名 = new 类名();
       Student s = new Student() ;

       //对象名.成员变量 = 赋值;   //赋值这些值 肯定来数据库
        //s.name = "高圆圆" ;   //被private修饰的成员变量:只能在本类中访问,外界不能访问
       // s.age = 20 ;
       // s.sex = "女" ;

        //使用对象名.成员方法名() ;
        //给学生的信息赋值---调用setXXX()
        s.setName("高圆圆") ;
        s.setAge(43) ;
        s.setSex("女") ;

        System.out.println("学生的姓名是:"+s.getName()+",年龄是"+s.getAge()+",性别是:"+s.getSex());

        //调用这个学生的一些其他行为
        s.studyJavaSE();
        s.codding();




    }
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值