JAVA语言基础(数组 面向对象思想)

JAVA语言基础(三)

  1. 数组
    1.1 一维数组
    1.2 二维数组
    1.3 练习
  2. 递归
  3. 面向对象思想
    3.1 面向对象思想概述
    3.2 类与对象
    3.3 对象的存储

1. 数组

  • 概念:数组是相同数据类型(基本数据类型和引用数据类型)的集合
  • 数组必须经过初始化(给数组在内存中分配内存空间 并为其元素赋值)才能进行使用
  • 动态初始化:只指定长度,由系统给出初始化值
  • 静态初始化:给出初始化值,由系统给出长度

1.1 一维数组

  1. 定义格式:
    格式1:(推荐使用)
    数据类型 + [ ] + 数组名
    int [ ] a;
    格式2:
    数据类型 +数组名+[ ]
    int a [ ];
  2. 不同初始化的定义:
    动态初始化:数据类型[ ] 数组名 = new 数据类型[数组长度];
    例:int [ ] arr = new int [6]; (数组长度代表数组内元素个数)
    静态初始化:数据类型[ ] 数组名 = new 数据类型 [ ]{元素1,元素2,…};
    例:int [ ] arr= new int [ ] {1,2,3,4,5,6,7} ;// int [ ] arr={1,2,3,4,5,6,7};

1.2二维数组

  1. 二维数组是 元素为数组的 数组。
  2. 定义格式:
    格式1:
    数据类型[ ][ ] 变量名 = new 数据类型[m][n];
    int[ ][ ] arr = new int[3][2];
    //定义了一个二维数组 里面有三个元素(数组)每个元素有两个元素
    格式2:
    数据类型[ ] [ ] 变量名 = new 数据类型[m][ ];
    int [ ][ ] arr = new int[3][];
    arr[0] = new int[2];
    arr[1] = new int[3];
    arr[2] = new int[1];
    //分别定义三个数组
    格式3:
    数据类型[ ][ ] 变量名 = new 数据类型[ ][ ]{{元素…},{元素…},{元素…}…};
    数据类型[ ][ ] 变量名 = {{元素…},{元素…},{元素…}};
    int[ ][ ] arr = {{1,2,3},{4,5,6},{7,8,9}};

1.3 练习问题

  1. 数组遍历
		package org.westos.practice;
		
		//一维数组遍历
		
		public class MyTest {
		    public static void main(String[] args) {
		        int arr[]={1,3,5,2,4,6};
		        for(int i=0;i<arr.length;i++)
		        {
		            System.out.println("arr["+i+"]"+"="+arr[i]);
		        }
		    }
		}  //循环输出数组中每一个元素的值
		package org.westos.practice;
		
		//二维数组遍历
		public class MyTest2 {
		    public static void main(String[] args) {
		        int [][]arr={{1,3,5},{2,4,6},{1,2,3}};
		        int i,j;
		        for(i=0;i<arr.length;i++){
		            for(j=0;j< arr[i].length;j++){
		                System.out.println("arr["+i+"]"+"["+j+"]"+"="+arr[i][j]);
		            }
		        }
		    }
		}

  1. 数组内元素翻转
		package org.westos.practice;
		public class MyTest2 {
		    public static void main(String[] args) {
		        int []arr={1,2,3,4,5,6};
		        int i,j;
		        for(i=0;i<arr.length/2;i++){
		            int t;
		            t=arr[i];
		            arr[i]=arr[arr.length-i-1];
		            arr[arr.length-i-1]=t;
		        }
		        for(i=0;i<arr.length;i++){
		            System.out.println(arr[i]);
		        }
		    }
		}

  1. 打印杨辉三角形(行数可以键盘录入)

    1
    1 1
    1 2 1
    1 3 3 1
    1 4 6 4 1
    1 5 10 10 5 1

			package org.westos.practice;
			
			import java.util.Scanner;
			
			public class MyTest2 {
			    public static void main(String[] args) {
			        Scanner sc = new Scanner(System.in);
			        int i,j;
			        System.out.println("Please input the rows: ");
			        int n=sc.nextInt();
			        int [][]arr=new int [n][n];    //定义有n个元素的n个数组    n*n
			        for(i=0;i<arr.length;i++){
			            arr[i][0]=1;
			            arr[i][i]=1;
			        }
			        for(i=2;i<arr.length;i++){
			            for(j=1;j<=i;j++)
			            arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
			        }
			        for(i=0;i<arr.length;i++){
			
			            for(j=0;j<=i;j++)
			            {
			                System.out.print(arr[i][j]+"\t");
			            }
			            System.out.println( );
			        }
			    }
			}


2. 递归

  1. 方法中的形参为方法本身

  2. 举例:
    例1:
    阶乘

     ```
     package org.westos.practice;
     import java.util.Scanner;
    
     public class MyTest2 {
         public static void main(String[] args) {
             System.out.println("Please input the number:");
             Scanner sc = new Scanner(System.in);
             int n=sc.nextInt();
             System.out.println(digui(n));
         }
         public static int digui(int n){
             if(n==1){
                 return 1;
             }else{
                 return n*digui(n-1);
             }
         }
     }
    

    例2:
    斐波那契数列
    兔子问题(斐波那契数列)
    有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第二十个月的兔子对数为多少?
    由此可见兔子对象的数据是:1 , 1 , 2 , 3 , 5 , 8 …

		package org.westos.practice;
		import java.util.Scanner;
		
		public class MyTest2 {
		    public static void main(String[] args) {
		        System.out.println("Please input the number of the month:");
		        Scanner sc = new Scanner(System.in);
		        int n=sc.nextInt();
		        System.out.println(Dl(n));
		    }
		    public static int  Dl(int n){
		        if(n==2||n==1){
		            return 1;
		        }else{
		            return Dl(n-1)+Dl(n-2);
		        }
		    }
		}

3.面向对象思想

3.1面向对象思想概述

  1. 根据不同的功能,将相同的属性和功能封装在一起,实现某一作用时直接使用封装好的过程,省去对每一个步骤的调用,提高效率。(直接调用封装好的对象)
  2. 面向对象的特征:
    封装
    继承
    多态

3.2 类和对象

  1. 类是功能和属性的集合体。是Java中的最小单位。
  2. 对象是类中的一个对象,即具有类中相似功能和属性的个体。
    类: 动物
    对象:人 鸟 狗
  3. 对类的定义和使用:
    修饰关键字(public final等) class 类名
    使用类的时候,需要将类进行实例化,即创建该类的对象,使用时通过该对象来调用类中属性和方法
    对象的创建:
    类名 对象名 = new 类名();
    对象中属性的使用:
    对象名.属性名;
    对象中方法的使用:
    对象名.方法名(参数);
    例:
				public class Person(){       //创建Person类
					 String name;				//创建name属性
					 int age;						//创建age属性

				public void show(String name,int age){		//定义show 方法传进参数(name,age)
					System.out.println("name:"+name);			//打印姓名
					System.out.println("age:"+age);				//打印年龄
				}
				}
				
				public class Test(){
				public static void main(String []args){
					Person person1=new Person();			//定义一个Person类的对象person1
					Person person2=new Person();         	//定义一个Person类的对象person2
					
					person1.name="店小二";					//修改person1的name属性为店小二
					person1.age=18;									//修改person1的age属性为18
					person1.show(name,age);					//调用person1中方法show
					
					person2.name="掌柜的";					//修改person2的name属性为掌柜的
					person2.age=40;									//修改person2的age属性为40
					person2.show(name,age);					//调用person2中方法show
					
				}
				}
  1. 在一个.java文件中可以并列定义多个类,要求是public 只能加给一个有main方法的类
		 public class MyTest {
		    public static void main(String[] args) {
		    
		    }
		
		}
		
		
		 class Cat{
		
		
		}
		
		
			class Dog{
		
		
		}
		
			class Tiger{
		
		
		}
  1. 当一个方法的形参为一个类的类型的时候就传入这个类的对象
  2. 基本数据类型,作为参数传递,形参的改变,不影响实参。
    引用数据类型(类 接口 数组等),作为参数传递,形参的改变,会影响实参。
  3. private关键字:
    是一个权限修饰符
    可以修饰成员变量和成员方法
    被其修饰的成员只能在本类中被访问
    private最常见的应用:
    1.把成员变量用private修饰
    2.提供对应的getXxx()和setXxx()方法
  4. this关键字:
    当我们的局部变量和成员变量相同的时候,使用this关键字区分局部变量和成员变量
    它就代表当前类的一个对象。谁调用这个方法,那么该方法的内部的this就代表谁

3.3 对象的存储

  1. 成员变量和局部变量区别
    位置不同:
    成员变量:定义在类中方法外
    局部变量:定义在方法的定义上或方法中
    存储位置不同:
    成员变量:存储在堆内存中
    局部变量:存储在栈内存中
    存在的时间不同:
    成员变量:随着对象的创建而创建,随对象的销毁而销毁
    局部变量:随着方法调用而产生,调用完方法就被删除
    初始化不同:
    成员变量:可以不给初始化值,由系统默认初始化
    局部变量:必须初始化值之后才能使用
    注意事项:当成员变量和局部变量重名的时候,我们变量的访问原则,遵循就近原则
    局部范围(方法声明上,方法中)如果找到就使用,如果找不到,就去成员范围找,如果找到就使用
  2. 匿名对象:匿名对象就是没有名字的对象
    类为Person时候
    new Person();为匿名对象
    a:调用方法,仅仅只调用一次的时候
    b:匿名对象可以作为实际参数传递`
		class Person(){
			int age=10;
			public void show(){
				System.out.println("123");
		}
		}
		则主方法里写 new Person().age;
		            new Person().show;进行调用
  1. 变量存储:
    在这里插入图片描述
    二位数组的存储

创建对象

猜你喜欢

转载自blog.csdn.net/lqw1372712775/article/details/92246161