java寒假复习day4
6.1数组接day3
数组赋值机制
基本数据类型赋值,这个值就是具体的数据,而且相互不影响
int n1=5; int n2=n1;
在这里其实是将5赋给了n2
n2的改变不会影响n1的值
数组在默认情况下是引用传递,赋的值是地址
int [] arr1 ={1,2,3};
int [] arr2 =arr1;
arr2的改变会影响arr1的值
6.2数组拷贝(内容复制)
public class shuzucopy {
public static void main(String[] args) {
int shuzu[]={4,-1,9,10,23};
int shuzu1[] = new int[shuzu.length];
for (int i =0 ;i<shuzu.length;i++){
shuzu1[i]=shuzu[i];
}
shuzu[0]=89;
System.out.print("数组的值为:");
for (int i =0 ;i<shuzu.length;i++){
System.out.print(shuzu[i]+" ");
}
System.out.print("\n数组1的值为:");
for (int i =0 ;i<shuzu.length;i++){
System.out.print(shuzu1[i]+" ");
}
}
}
! 运行结果图
6.3数组添加
```java
public class shuzuadd {
public static void main(String[] args) {
int shuzu[]={4,-1,9,10,23};
System.out.print("未添加元素的数组为:");
for (int i =0 ;i<shuzu.length;i++){
System.out.print(shuzu[i]+" ");
}//将为添加的元素输出
int shuzuNew[] =new int [shuzu.length + 1];
for (int i =0 ;i<shuzu.length;i++){
shuzuNew[i]=shuzu[i];
}//设置一个新的数组并将其赋值
shuzuNew[shuzuNew.length -1]=89;
shuzu = shuzuNew;//将新的数组的地址赋给原来的数组地址
System.out.print("\n添加元素的数组为:");
for (int i =0 ;i<shuzu.length;i++){
System.out.print(shuzu[i]+" ");
}
}
! 运行结果图
询问用户的是否要继续添加元素
public class shuzuadd {
public static void main(String[] args) {
Scanner myScanner = new Scanner(System.in);
int shuzu[]={4,-1,9,10,23};
do{
int shuzuNew[] =new int [shuzu.length + 1];
for (int i =0 ;i<shuzu.length;i++){
shuzuNew[i]=shuzu[i];
}//设置一个新的数组并将其赋值
System.out.print("请输入你要添加的元素:");
int addnum = myScanner.nextInt();//接收一个数据
shuzuNew[shuzuNew.length -1]=addnum;
shuzu = shuzuNew;
//将新的数组的地址赋给原来的数组地址
System.out.print("添加元素的数组为:");
for (int i =0 ;i<shuzu.length;i++){
System.out.print(shuzu[i]+" ");
}
System.out.print("\n是否要继续添加?(y/n)");//询问用户是否继续
char ks =myScanner.next().charAt(0);//接收一个字符
if(ks == 'n'){
break;
}
} while(true);
}
}
这里空间不能动态增长,空间复杂度大,需要新声明一个数组
! 运行结果图
6.4冒泡排序
public class Bubblesort{
public static void main(String[] args) {
int arr[]={23,65,45,1,73,89,34,62};
for (int i=0;i<arr.length-1;i++) {
for (int j = 0; j < arr.length - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp;
temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
System.out.print("\n第"+(i+1)+"一趟的结果为:");
for (int s =0 ;s<arr.length;s++){
System.out.print(arr[s]+" ");
}
}
System.out.print("\n冒泡排序后的结果为:");
for (int d =0 ;d<arr.length;d++){
System.out.print(arr[d]+" ");
}
}
}
! 运行结果图
6.5二维数组
public class twoarry{
public static void main(String[] args) {
int [][] arr = {{0,0,0,0,0,0},
{0,0,1,0,0,0},
{0,2,0,3,0,0},
{0,0,0,0,0,0}};
for (int i = 0;i<arr.length;i++) {
for (int j = 0; j < arr[i].length; j++) {
//arr[i]表示二维数组的第i+1个元素
//arr[i].length得到对应的每一个数组的长度
System.out.print(arr[i][j]+"\t");
}
System.out.println();
}
}
}
! 运行结果图
6.6二维数组细节
二维数组的每一个元素是一维数组,所以如果要得到每一个一维数组的值还需要再次遍历
6.7二维数组的使用
方法一:动态初始化
例:int a [ ] [ ] = new int [2][3]
public class twoarry{
public static void main(String[] args) {
int a [ ] [ ] = new int [2][3];
for (int i=0;i<a.length;i++){
for (int j=0;j<a[i].length;j++){
System.out.print(a[i][j]+"");
}
//a[i]表示二维数组的第i+1个元素
//a[i].length得到对应的每一个数组的长度
System.out.println();
}
}
}
! 运行结果图
方法二:动态初始化
先声明 ,再开辟空间
例:
int arr [][];//先声明
arr = new int [4] [3];//再开辟空间
方法三:动态初始化-列数不确定
有一个三维数组,但是每一个数组的元素个数是不一样的
public class twoarry{
public static void main(String[] args) {
int a [ ] [ ] = new int [5][];//创建了二维数组
for (int i=0;i<a.length;i++){
//给每一个一维数组开辟空间
//如果没有给一维数组new,那么arr[i]就是null
a[i] = new int [i+1];
for (int j = 0;j<a[i].length;j++)
{
a[i][j] = i+1;
}
}
//输出每一个一维数组
for (int i = 0;i<a.length;i++) {
for (int j = 0; j < a[i].length; j++) {
//arr[i]表示二维数组的第i+1个元素
//arr[i].length得到对应的每一个数组的长度
System.out.print(a[i][j]+"\t");
}
System.out.println();
}
}
}
! 运行结果图
! 关于申请空间的解析图片
方法四:静态初始化
int arr [][]= {{1,3,4,}{4,67,94,26}}
7面向对象编程
7.1类与对象
类是一种数据类类型
例如:猫类是一个自定义数据类型,
对象就是一个具体的实例
例如:大学是一个类,清华大学和北京大学都是对象
把类的特征提取出来
class Cat{
String name;
int age;
String color;
}//定义一个猫类
public class twoarry{
public static void main(String[] args) {
Cat cat1 = new Cat();//实例化一个猫
cat1.name ="小白";
cat1.age = 12;
cat1.color = "白色";
//对实例化的猫进行赋值它的属性
Cat cat2 = new Cat();//实例化一个猫
cat2.name ="小黑";
cat2.age = 4;
cat2.color = "黑色";
//对实例化的猫进行赋值它的属性
System.out.println("第一只猫的信息:"+cat1.name +" "+
cat1.age + " " + cat1.color );//输出第一只猫的信息
System.out.println("第一只猫的信息:"+cat2.name +" "+
cat2.age + " " + cat2.color );//输出第二只猫的信息
}
}
对象在内存中存在的形式
如果是基本数据类型则在堆中,如果是字符串类型(引用类型)则会放在方法区的常量池中
成员变量/属性
成员变量=属性
属性是类的一个组成部分,一般是基本数据类型,也可以是引用类型(数组)
注意事项和使用细节
属性的定义语法同变量;
属性的定义类型可以为任意类型,包含基本类型或引用类型
属性如果不赋值,有默认值,规则和数组一致
int 0;short 0;byte 0;long 0;float 0.0; double 0.0 ;char \u0000;boolean false;String null
如何创建对象
方法一:先声明再创建
Cat cat;
cat =new Cat();
方法二:直接创建
Cat cat = new Cat();
如何访问属性
对象名.属性名
类和对象的内存分配机制
栈:一般存放基本数据类型
堆:存放对象
方法区:常量池,类加载信息
JAVA创建对象的流程简单分析
Person p = new Person();
p.name =“jack”;
p.age = 10;
1、先加载类的信息(只会加载一次)
2、再堆中分配空间,进行默认初始化,把地址赋给p,p就指向对象
3.进行指定初始化