Java第二周学习总结

for循环嵌套——打印九九乘法表

键盘录入一个数据n(1-9之间):输出对应的NN乘法表

//导包
import java.util.Scanner;
class FunctionTest3{
	public static void main(String[] args){
		
		//创建键盘录入对象
		Scanner sc = new Scanner(System.in) ;
		
		//提示并接收数据
		System.out.println("请输入行数:");
		int m = sc.nextInt() ;
		
		System.out.println("请输入列数:");
		int n = sc.nextInt() ;
		
		//单独调用
		printStar(m,n) ;
		System.out.println("-------------------------") ;
		
		System.out.println("请输入一个数据num(1-9之间): ") ;
		int num = sc.nextInt() ;//实际参数
		printNN(num) ;
	}
	
	/*
		nn乘法表
		定义方法
			明确返回值类型:没有具体返回值void代替
			参数类型以及参数个数
			int 1个参数
	*/
	public static void printNN(int n){//形参
		for(int x = 1; x <= n ; x ++){
			for(int y = 1 ; y <= x ; y++){
				System.out.print(y+"*"+x+"="+(y*x)+"\t") ;
			}
			System.out.println() ;
		}
	}
	
	/*
		定义一个方法:
			1)明确返回值类型:没有具体返回值类型,使用void代替
			2)明确参数类型和参数个数:
			int  2个参数
	*/
	public static void printStar(int m,int n){
		for(int x = 0 ; x < m ; x ++){
			for(int y = 0 ; y < n ; y ++){
				System.out.print("*");
			}
			System.out.println() ;
		}	
	}
}

数组概述

1)数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。
2)数组既可以存储基本数据类型,也可以存储引用数据类型。

数组的定义格式:
格式1:数据类型[] 数组名;
格式2:数据类型 数组名[];
注意:针对数组定义两种格式,推荐使用第一种格式。因为第一种的可读性更强。第二种可以早期的时候确实有很多人这样用。不过,现在这样用的人越来越少了。作为Java的粉丝C#(Java的模仿者)就不再支持第二种语法格式了。越来越多的语言可能会抛弃第二种格式。

数组的初始化方式:
动态初始化:初始化时只指定数组长度,由系统为数组分配初始值。
静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度。

Java中的内存分配

Java 程序在运行时,需要在内存中的分配空间。为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。

  1. 栈 存储局部变量
  2. 堆 存储new出来的东西
  3. 方法区(面向对象部分讲)
  4. 本地方法区(和系统相关)
  5. 寄存器(给CPU使用)

静态初始化

格式:
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
举例:
int[] arr = new int[]{1,2,3};
解释:定义了一个int类型的数组,这个数组中可以存放3个int类型的值,并且值分别是1,2,3。
其实这种写法还有一个简化的写法—>int[] arr = {1,2,3};

数组中常见的小问题:
1)数组索引越界
ArrayIndexOutOfBoundsException
访问到了数组中的不存在的索引时发生。
出现的原因:
访问了数组中不存在的角标值
解决方案:
更改角标在范围内即可!
2)空指针异常
NullPointerException
数组引用没有指向实体,却在操作实体中的元素时
出现的原因:
代码结构不严谨(某个对象已经为null,还有使用这个对象调用方法或者访问元素…)
解决方案:
只要 给对该对象进行非空判断
如果该对象不为空,才能使用这个对象完成一些操作!

为什么要记住这些小问题?
因为写程序不仅仅是把代码写出来,还包括出现问题后要能够及时的把问题解决。而排错也应该是我们的基本功。所以,我们也应该记住一些常见的问题,以及出错原因和解决方案。

面试常见问题1:

数组中有没有length属性,字符串有没有length属性,集合中有没有?
答:数组中存在length属性。
字符串没有length属性—>String类中:length()
集合没有length属性—>集合中:size()

数组的应用——遍历

遍历:就是将元素的内容一一输出出来!

class ArrayTest{
	public static void main(String[] args){
		//定义一个数组,静态初始化
		int[] arr = {57,69,80,13,22} ;
		printArray2(arr) ;
	}
	//最终版代码:遍历数组
	public static void printArray2(int[] array){
		//拼接左中括号
		System.out.print("{") ;
		//遍历array数组
		for(int x = 0 ; x < array.length; x ++){//x角标
			//获取到每一个元素
			//判断:如果x取到最大索引值,---->取到最后一个元素了
			if(x==array.length-1){
				//最后一个元素,输出元素内容以及右中括号
				System.out.println(array[x]+"}") ;
			}else{
				//不是取到最大索引值,将中间的元素按照按照格式输出(元素+逗号+空格)
				System.out.print(array[x]+", ") ;
			}
		}
	}
}

数组中的冒泡排序法

两两比较,大的值往后放,第一次比完最大值就出现在最大索引处,依次比较,可以得到一个排好序的数组。
比较次数:数组长度-1—>length-1
代码如下:

class Test5{
	public static void main(String[] args){
				int[] arr={12,54,66,21,36};
				printArray(arr);
				maoPao(arr);
				printArray(arr);		
	}
	public static void printArray(int[] arr){
		System.out.print("[");
		for(int x=0;x<arr.length;x++){
			if(x==arr.length-1){
				System.out.println(arr[x]+"]");
			}else{
				System.out.print(arr[x]+", ");
			}
		}
	}
		public static void maoPao(int[] arr){
			for(int i=0;i<arr.length;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;
					}
				}
			}
		}
}

二维数组

二维数组:
其实就是一个元素为一维数组的数组
定义格式:
数据类型[] 数组名称[] ;
数据类型[][] 数组名称 ;
动态初始化:
二维数组的格式1:
数据类型[][] 数组名称 = new 数据类型[m][n] ;
举例:
int[][] arr = new int[3][2] ;
=号左边:
int:当前数组存储的是int类型的元素
[][]:定义的是一个二维数组
arr :数组对象名称
=号右边:
new :在堆内存中创建该数组的对象(产生堆内存空间地址)
int:当前数组存储的是int类型的元素
[3]:当前定义的这个二维数组中有3个一维数组
[2]:每一个一维数组中有2个长度

注意:
		在一些笔试题:定义变量 进行初始化
			int x, y ;  x 和y是两个int类型的变量
			int x [],y[] ;x和y都是int类型的数组
			int x[][],y[] ; x是一个二维数组,y是一个一维数组

二维数组的格式2:
指定了一维数组的个数,一维数组的长度需要动态给定
数据类型[][] 数组名称 = new 数据类型[m][] ;
举例:
int[][] arr = new int[3][] ;
二维数组的格式3:
就是静态初始化
数据类型[][] 数组名称 =
new 数据类型[][]{{元素1,元素2,元素3…},{元素1,元素2,元素3,…},{,}};
简写格式:
数据类型 [][] 数组名称 = {{元素1,元素2,元素3…},{元素1,元素2,元素3,…},{,}};
举例:
int[][] arr = new int[][]{{1,2,3},{4,5,6},{7,8,9}} ;
—>简写格式 int[][] arr = {{1,2,3},{4,5,6},{7,8,9}} ;

面试常见问题2:

需求看以下代码计算结果:

class ArgsDemo{
	public static void main(String[] args){
		
		//定义两个变量
		int a = 10 ;	
		int b = 20 ;
		System.out.println("a:"+a+",b:"+b) ;
		change(a,b) ;
		System.out.println("a:"+a+",b:"+b) ;
		
		int[] arr = {1,2,3,4,5} ; 
		change(arr) ;
		System.out.println(arr[1]) ;
	}
	
	//形式参数是两个数据类型数据
	public static void change(int a,int b){ //实际参数赋值给形式参数
		System.out.println("a:"+a+",b:"+b) ;
			a = b ;
			b = a +b ;
		System.out.println("a:"+a+",b:"+b) ;
	}
	
	public static void change(int[] arr){
		//遍历
		for(int x = 0 ; x  < arr.length ; x ++){
			if(arr[x]%2 ==0){
				arr[x] *= 2 ;
			}
		}
	}
}

结果如下:
Java第二周学习总结_第1张图片
**结论:**形式参数如果是基本数据类型,形式参数的改变不会影响实际参数。
方法的形式参数如果是引用类型(数组,类,接口),形式参数的改变会直接影响实际参数。
特别注意,String是特殊的引用类型,如果作为形参,不会影响实际参数。

JAVA中的面向对象

基于面向过程的一种思想!
面向过程: 代表C语言,强调一个功能的步骤
面向对象: 代表Java语言,强调对象的创建,使用对象调用功能! (用到了键盘录入Scanner类)
面向对象的三大特征:封装,继承,多态!
面向对象设计原则:不断创建对象,使用对象,指挥该对象做事情!
面向对象的思想特点:
1)更符合生活中的思想行为习惯
2)让复杂的事情简单化
3)让我们成从执行者变成了一个指挥者!
Scanner:键盘录入---->录入int类型数据/String类型数据
比如把大象装进冰箱:

 面向过程:强调功能的步骤
	 
			Demo类
		class Demo{
			public static void main(String[] args){
				//调用打开冰箱门的功能
				open() ;
				//调用in功能
				in();
				//关闭冰箱门的功能
				close();
			}
			//定义一个冰箱打开的功能
			public static void open(){
				System.out.println("打开冰箱门") ;
			}
			//定义一个大象进去的功能
			public static void in(){
				System.out.println("将大象装进去") ;
			}
			//定义一个冰箱关闭的功能
			public static void close(){
				System.out.println("关闭冰箱门") ;
			}
			...
		}
面向对象: 创建对象,使用对象调用功能
		伪代码
		"把大象装进冰箱"  使用名词提取法---- 大象  冰箱
		Demo类 :测试(main方法测试)
		大象类
		冰箱类
		class Demo{
			public static void main(String[] args){
				冰箱类的对象.open() ; 
				大象类的对象.in() ;
				冰箱类的对象.close() ;
			}
		}
		
		class 冰箱类{
			public static void open(){
				System.out.println("打开冰箱门") ;
			}
			public static void close(){
				System.out.println("关闭冰箱门") ;
			}
		}
		
		class 大象类{
			public static void in(){
			
				System.out.println("将大象装进去) ;
			}
		}

类和事物的关系:

事物:描述现实世界的真实存在泛指的东西!
类:是描述一组事物的属性和行为的集合,是Java语言的最基本的单元

你可能感兴趣的:(Java第二周学习总结)