JAVA语言基础(三)
- 数组
1.1 一维数组
1.2 二维数组
1.3 练习 - 递归
- 面向对象思想
3.1 面向对象思想概述
3.2 类与对象
3.3 对象的存储
1. 数组
- 概念:数组是相同数据类型(基本数据类型和引用数据类型)的集合
- 数组必须经过初始化(给数组在内存中分配内存空间 并为其元素赋值)才能进行使用
- 动态初始化:只指定长度,由系统给出初始化值
- 静态初始化:给出初始化值,由系统给出长度
1.1 一维数组
- 定义格式:
格式1:(推荐使用)
数据类型 + [ ] + 数组名
int [ ] a;
格式2:
数据类型 +数组名+[ ]
int a [ ]; - 不同初始化的定义:
动态初始化:数据类型[ ] 数组名 = 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:
数据类型[ ][ ] 变量名 = 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 练习问题
- 数组遍历
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]);
}
}
}
}
- 数组内元素翻转
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 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:
阶乘``` 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面向对象思想概述
- 根据不同的功能,将相同的属性和功能封装在一起,实现某一作用时直接使用封装好的过程,省去对每一个步骤的调用,提高效率。(直接调用封装好的对象)
- 面向对象的特征:
封装
继承
多态
3.2 类和对象
- 类是功能和属性的集合体。是Java中的最小单位。
- 对象是类中的一个对象,即具有类中相似功能和属性的个体。
类: 动物
对象:人 鸟 狗 - 对类的定义和使用:
修饰关键字(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
}
}
- 在一个.java文件中可以并列定义多个类,要求是public 只能加给一个有main方法的类
public class MyTest {
public static void main(String[] args) {
}
}
class Cat{
}
class Dog{
}
class Tiger{
}
- 当一个方法的形参为一个类的类型的时候就传入这个类的对象
- 基本数据类型,作为参数传递,形参的改变,不影响实参。
引用数据类型(类 接口 数组等),作为参数传递,形参的改变,会影响实参。 - private关键字:
是一个权限修饰符
可以修饰成员变量和成员方法
被其修饰的成员只能在本类中被访问
private最常见的应用:
1.把成员变量用private修饰
2.提供对应的getXxx()和setXxx()方法 - this关键字:
当我们的局部变量和成员变量相同的时候,使用this关键字区分局部变量和成员变量
它就代表当前类的一个对象。谁调用这个方法,那么该方法的内部的this就代表谁
3.3 对象的存储
- 成员变量和局部变量区别
位置不同:
成员变量:定义在类中方法外
局部变量:定义在方法的定义上或方法中
存储位置不同:
成员变量:存储在堆内存中
局部变量:存储在栈内存中
存在的时间不同:
成员变量:随着对象的创建而创建,随对象的销毁而销毁
局部变量:随着方法调用而产生,调用完方法就被删除
初始化不同:
成员变量:可以不给初始化值,由系统默认初始化
局部变量:必须初始化值之后才能使用
注意事项:当成员变量和局部变量重名的时候,我们变量的访问原则,遵循就近原则
局部范围(方法声明上,方法中)如果找到就使用,如果找不到,就去成员范围找,如果找到就使用 - 匿名对象:匿名对象就是没有名字的对象
类为Person时候
new Person();为匿名对象
a:调用方法,仅仅只调用一次的时候
b:匿名对象可以作为实际参数传递`
class Person(){
int age=10;
public void show(){
System.out.println("123");
}
}
则主方法里写 new Person().age;
new Person().show;进行调用
- 变量存储: