java学习笔记3

1.方法

定义:用功能代码块{}将核心功能包起来,并且取一个名字.
调用方式:
      方法名(实际参数);
      单独调用:没有输出.
      输出调用:直接输出结果.
      赋值调用:返回值类型 变量名=方法名(实际参数);
注意事项:
      不能嵌套方法;
      形式参数类型必须携带,不可以省略;
      方法调用时,实际参数类型不需要携带;
格式:(1)有具体返回值类型的方法定义
     public static 返回值类型 方法名(形式参数类型 变量名){
          return 结果;
     }

  举例: 求2个数的和:

 package com.jhq;
import java.util.Scanner;
public class Sum {
    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();
        int x=twoSum(a,b);
        System.out.println("两个数的和为:"+x);
    }
    public static int twoSum(int a, int b){
        int c=a+b;
        return c;
    }
}

 (2)没有具体返回值类型的;
     定义格式:  public static void 方法名(形式参数列表){
            直接输出数据
     }
     一般采用单独调用.

方法重载:多个方法名相同,参数列表不同(参数个数,参数类型,参数顺序),与返回值无关.
       目的:为了让这个功能的扩展性更多.

 举例:输出99乘法表;

package com.jhq;
import java.util.Scanner;
public class ChengFa {
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入数据:");
        int a=sc.nextInt();
        table(a);
    }
    public static void table(int i){
        for(int x=1;x<=i;x++){
            for(int y=1;y<=x;y++){
                System.out.print(y+"*"+x+"="+(y*x)+"\t");
            }
            System.out.println();
        }
    }
}

2.数组

定义:是只能够存储同一种类型的容器,在同一数组中,元素的数据类型必须一致.
格式:数据类型[] 数组名称;    数据类型 数组名称[];
初始化:(1)动态初始化:   
         数据类型[] 数组名称=new 数据类型[长度];
       访问数组中的元素:
       数组名称[索引值] 索引值从0开始;

  举例: 访问数组  int[] arr=new int[3];中的每一个元素.

 package com.jhq;

public class Arry {
    public static void main(String[] args){
        int[] arr=new int[3];
        arr1(arr);
    }
    public static void arr1(int[] arr){
        arr[0]=1;
        arr[1]=6;
        arr[2]=5;
        System.out.println("数组的第一个元素为:"+arr[0]);
        System.out.println("数组的第二个元素为:"+arr[1]);
        System.out.println("数组的第三个元素为:"+arr[2]);
    }
}

多个数组对象的内存图解;

package com.jhq;
public class Arry1 {
    public static void main(String[] args) {
        int[] arr=new int[2];
        int[] arr1=new int[3];
        arr[0]=1;
        arr[1]=3;
        arr1[0]=5;
        arr1[1]=2;
        arr1[2]=4;
        System.out.println(arr);
        System.out.println(arr1);
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr1[0]);
        System.out.println(arr1[1]);
        System.out.println(arr1[2]);
        int[] arr2=arr;
        arr2[0]=5;
        arr2[1]=4;
        System.out.println(arr2);
        System.out.println(arr2[0]);
        System.out.println(arr2[1]);
    }
}

 数组中的异常;
   (1)编译时期的异常:jvm检查语法不通过语法格式存在问题
   (2)运行时期异常:开发者:代码书写不严谨导致的问题.
       java.lang.ArrayIndexOutOfBoundsException:数组角标越界异常
        出现的原因:访问了数组中不存在的角标(索引值)
        如何解决:检查代码,更改索引值
        java.lang.NullPointerException:空指针异常
        引用类型的默认值都是null;
        String s = null ;  字符串是一种特殊的引用类型
        出现的原因:某一个对象已经为空了,null(没有堆内存地址),这个时候还要去访问元      素或者调用
        这个对象的方法,那么就出现空指针;
        如何解决:
            使用逻辑判断语句,对该对象进行非空判断.

 数组的应用:
     (1)数组的遍历:
  举例:遍历这个数组 int [] arr={25,30,2,85,62}

package com.jhq;
public class MaoPao {
    public static void main(String[] args){
        int[] arr={25,30,2,85,62,};
        System.out.println("数组为:");
        arrPrry(arr); 
          }
  public static void maoPao(int[] arr){
        for(int x=0;x<arr.length-1;x++){
            for(int y=0;y<arr.length-x-1;y++){
                if(arr[y]>arr[y+1]){
                    int temp=arr[y];
                    arr[y]=arr[y+1];
                    arr[y+1]=temp;
                }
            }
        }
    }
}

 (2)求最大值或者最小值
   举例:

 package com.jhq;

public class ArryMax {
    public static void main(String[] args) {
        int[] arr={25,30,45,60,2};
        int max=getMax(arr);
        System.out.println("最大值为: "+max);
    }

    public static int getMax(int[] arr) {
        int max=arr[0];
        for(int x=0;x<arr.length;x++){
            if(max<arr[x]){
                max=arr[x];
            }
        }
        return max;
    }
}

 (3)数组逆序
 举例: 将数组int[] arr={1,25,30,52,20}逆序;

 package com.jhq;

public class ArryNi {
    public static void main(String[] args) {
        int[] arr={1,25,30,52,20};
        System.out.println("逆序前:");
        arrPrry(arr);
        System.out.println("逆序后:");
        arrNi1(arr);
        arrPrry(arr);
    }
    public static void arrPrry(int[] arr){
        System.out.print("[");
        for(int x=0;x<arr.length;x++){
            if(arr[x]==arr[arr.length-1]){
                System.out.println(arr[x]+"]");
            }else{
                System.out.print(arr[x]+",");
            }
        }
    }
    public static void  arrNi1(int[] arr){
        //定义两个变量
        //start:起始索引:0开始
        //end:最终索引:arr.length-1
        for(int start = 0,end = arr.length-1; start < end; start++,end--){
            //定义中间变量
            //元素互换
            int temp = arr[start] ;
            arr[start] = arr[end] ;
            arr[end] = temp ;
        }
    }
}

 (4)数组元素查询
举例 查询10第一次出现在数组int[] arr={10,20,60,50,40};中的索引值.

package com.jhq;
public class ChaXun {
    public static void main(String[] args) {
        int[] arr={10,20,60,50,40};
        int x=cha(arr,10);
        System.out.println("第一次出现的索引值为 :"+x);
    }
    public static int cha(int[] arr,int target){
        int index=-1;
        for(int x=0;x<arr.length;x++){
            if(target==arr[x]){
                index=x;
                break;
            }
        }
         return index;
    }
}

3.冒泡排序

      思想:两两相比较,将较大的值往后放,第一次比较完毕,最大值出现在最大索引处,依次继续进行比较,即可得到排好序的数组.

图解如下:

    举例: int[] arr={25,30,2,85,62,};

package com.jhq;
public class MaoPao {
    public static void main(String[] args){
        int[] arr={25,30,2,85,62,};
        System.out.println("排序前:");
        arrPrry(arr);
        System.out.println("排序后:");
        maoPao(arr);
        arrPrry(arr);
    }
    public static void arrPrry(int[] arr){
        System.out.print("[");
        for(int x=0;x<arr.length;x++){
            if(arr[x]==arr[arr.length-1]){
                System.out.println(arr[x]+"]");
            }else{
                System.out.print(arr[x]+",");
            }
        }
    }
    public static void maoPao(int[] arr){
        for(int x=0;x<arr.length-1;x++){
            for(int y=0;y<arr.length-x-1;y++){
                if(arr[y]>arr[y+1]){
                    int temp=arr[y];
                    arr[y]=arr[y+1];
                    arr[y+1]=temp;
                }
            }
        }
    }
}

4.面向对象

思想特点:
          1)更符合我们生活中思想行为习惯
           2)让更复杂的事情简单化
        3)角色发生了变化:我们从执行者变成了指挥者!
举例:
        买笔记本:
           面向过程:
               了解自己的需要配置--->西安赛格电脑城----->看一看--->砍价-----> 被坑了..
           面向对象:
            了解自己的需要配置---->找一个懂行的朋友----->买回来
设计原则:
     不断的创建对象,使用对象,指挥对象.
特征:封装,继承,多态.

5.类

定义:描述一组事物的属性和行为的集合.是java中最基本的单元.
包含:成员变量 在类中,方法外.
    成员方法 格式  public 返回类型 方法名(形式参数列表){
          业务体
    }
面试题:
  基本数据类型作为"形式参数"传递特点:形式参数的改变不会影响实际参数.
  引用类型作为"形式参数"的传递特点:形式参数的改变会影响实际参数.(string除外). 

6.对象

定义;描述一个具体的事物.  在测试类中使用:main方法所在类
代码体现:
   格式: 类名 对象名=new 类名();
   给具体的事物属性赋值
   对象名.成员变量=赋值;
   调用具体事物的行为
   对象名.成员方法名();

举例: 一个手机类
          品牌,价格,颜色.
          打电话,打游戏.
          品牌华为,价格7500,颜色土豪金.

package com.jhq;

public class PhoneTest1 {
    public static void main(String[] args) {
        Phone1 p1=new Phone1("华为",7500,"土豪金");
        p1.call("张三");
        p1.play();
        System.out.println("我的手机是:"+p1.getName()+",花了"+p1.getPrice()+",是"+p1.getColor());
        p1.setName("苹果13");
        p1.setPrice(13000);
        p1.setColor("绿色");
        System.out.println("我的手机是:"+p1.getName()+",花了"+p1.getPrice()+",是"+p1.getColor());
        p1.call("张三");
        p1.play();
    }
}
class Phone1{
    private String name;
    private int price;
    private String color;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }
    public Phone1(){}
    public Phone1(String name,int price,String color){
        this.name=name;
        this.price=price;
        this.color=color;
    }
    public void call(String callName){
        System.out.println("手机可以用来给"+callName+"打电话");
    }
    public void play(){
        System.out.println("手机正在打王者荣耀");
    }
}

 面试题:局部变量和成员变量的区别:
  (1)在类中的书写位置不同:
       局部变量:在方法中定义或在方法声明上;
       成员变量:在类中,方法外;
  (2)在内存中的位置不同:
       局部变量:在栈内存中
       成员变量:在堆内存中
  (3)生命周期不同:
       局部变量:随着方法的调用而存在,随着方法的调用结束而消失;
       成员变量:随着对象的创建而存在,随着对象的调用结束完毕,等待垃圾回收器空闲回收不会立即消失.
  (4)初始化时机不同:
       局部变量:要么先定义,使用之前必须初始化,要么直接初始化.
       成员变量:可以不赋值,系统默认堆成员变量初始化;
               也可以通过对象名.成员变量=赋值;
匿名对象:没有名字的对象.
      创建对象格式:
      类名 对象名=new类名();
      创建匿名对象的格式:
      new 类名();
      好处:   节省空间;
              开发中,匿名对象一般使用"一次即可",使用完毕就立即垃圾回收器回收;
              手机移动端/Android/鸿蒙系统:基于java语言
       访问类的成员变量:
       new 类名().成员变量名;
       访问类的成员方法:没有具体返回值类型
       new 类名().成员方法名();

6.1封装

private:私有的,不能直接访问的:
   特点:
        被priva修饰对的成员变量或者成员方法,只能在本类中被访问;
        外界类是不能直接访问的,间接可以通过公共的成员方法访问.
 局部变量名和成员变量名称一致(局部变量隐藏了成员变量),java提供了一个关键字this.
    this:代表当前类对象的地址引用.

图解:

 

7.构造方法

定义: 构造方法是一种特殊的方法,方法名和类名一致;
特点:
    (1)方法名和类名一致
    (2)构造方法没有返回值类型.
    (3)连void都没有.
 分类: 无参构造方法:没有参数;
       有参构造方法:有具体的参数类型;
作用:
       就是对类中的数据(成员属性)进行初始化;
注意事项:
        1)当我们开发者既没有提供无参构造方法,也没有提供有参构造方法,
           系统永远给我们提供 "无参构造方法"
            类名 对象名 = new 类名() ;
        2)如果我们提供了有参构造方法,那么系统不会在提供无参构造方法
            构造方法的作用:给类的成员属性可以进行数据初始化.

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值