JAVA自学笔记06

1、二维数组

1)格式:

①数据类型[][]数组名 = new 数据类型[m][n];

或 数据类型[]数组名[]=new 数据类型[m][n];

m表示这个二维数组有多少个一维数组

n表示每个一维数组的元素个数

存储图解:

eg:int[][]arr = new int[3][3];

意义:定义了一个二维数组名为arr,这个二维数组有3个一维数组,名称是arr[0]、arr[1]、arr[2],每个数组有3个元素,可通过arr[m][n]来访问相应m+1、n+1元素

区分:

int[] x,y[];//x是一维数组,y是二维数组。

@例题1:定义一个二维数组

int[]x[]=new int[3][2];
System.out.println(x);//输出二维数组的名称 System.out.println(x[k]);//输出二维数组的第k+1个一维数组的名称

②数据类型[][]变量名=new 数据类型[m][];

意义:m表示这个二维数组有多少个一维数组,但没有直接给出一维数组的元素个数,可以不一样。

eg:int[][]arr=new int[2][];

arr[0]=new int[3];

arr[1]=new int[7];

存储图解:



@例题3 写出下列程序的结果

int[][]arr=new int[2][];

arr[0]=new int[3];

arr[1]=new int[2];

System.out.println(arr);//输出地址

System.out.println(arr[0]);//null,下同

System.out.println(arr[1]);

arr[0]=new int[3];

//开辟空间

arr[1]=new int[2];

System.out.println(arr[0]);//地址值,下同

System.out.println(arr[1]);

③前两种格式都是动态初始化,这是静态初始化

数据类型[][] 变量名 = new 数据类型[][]{{元素…},{元素…},…};

简化格式:数据类型[][]变量名={{元素…},{元素…},…}



eg:int[][] arr={{1,2,3},{34,34}};

存储图解

2)二维数组的遍历

int [][]arr={{1,2,3},{34,34}};

for(int x=0;x

class Sum{
public static void main(String args[]){
int[][] arr={{22,66,44},{23,43,11},{43,22,34},{44,33,22}};
int sum=0;
for(int x=0;x<arr.length;x++){
for(int y=0;y<arr[x].length;y++){sum+=arr[x][y];
}
}
System.out.println(sum);
}
}

@例题4:键盘录入行数,屏幕输出杨辉三角形

import java.util.Scanner;

class Array2Test3 {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in); //这个n的数据来自于键盘录入。
System.out.println("请输入一个数据:");
int n = sc.nextInt(); //定义二维数组
int[][] arr = new int[n][n]; //给这个二维数组任何一行的第一列和最后一列赋值为1
for(int x=0; x<arr.length; x++) {
arr[x][0] = 1; //任何一行第1列
arr[x][x] = 1; //任何一行的最后1列
} //按照规律给其他元素赋值
//从第三行开始,每一个数据是它上一行的前一列和它上一行的本列之和。
for(int x=2; x<arr.length; x++) {
//这里如果y<=x是有个小问题的,就是最后一列的问题
//所以这里要减去1
//并且y也应该从1开始,因为第一列也是有值了
for(int y=1; y<=x-1; y++) {
//每一个数据是它上一行的前一列和它上一行的本列之和。
arr[x][y] = arr[x-1][y-1] + arr[x-1][y];
}
} //遍历这个二维数组。
/*
for(int x=0; x<arr.length; x++) {
for(int y=0; y<arr[x].length; y++) {
System.out.print(arr[x][y]+"\t");
}
System.out.println();
}
*/
//这个时候,要注意了,内循环的变化必须和曾经讲过的九九乘法表类似
for(int x=0; x<arr.length; x++) {
for(int y=0; y<=x; y++) {
System.out.print(arr[x][y]+"\t");
}
System.out.println();
}
}

2、参数传递

例题5:看程序写结果

class ArgsDemo {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println("a:"+a+",b:"+b);
change(a,b);//a=10,b=20
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) { //a=10,b=20
System.out.println("a:"+a+",b:"+b); //a:10,b:20
a = b; //a=20
b = a + b; //b=40
System.out.println("a:"+a+",b:"+b); //a:20,b:40
} public static void change(int[] arr) { //arr={1,2,3,4,5};
for(int x=0; x<arr.length; x++) {
if(arr[x]%2==0) {
arr[x]*=2;
}
}
//arr={1,4,3,8,5};
}
}

基本类型:形式参数的改变对实际参数没有影响

引用类型:形式参数的改变直接影响实际参数

图解:

(方法在栈内执行)

@例题5:某个公司采用公用电话传递数据信息,数据是小于8位的整数,为了确保安全,

在传递过程中需要加密,加密规则如下:

首先将数据倒序,然后将每位数字都加上5,再用和除以10的余数代替该数字,

最后将第一位和最后一位数字交换。 请任意给定一个小于8位的整数,

然后,把加密后的结果在控制台打印出来。

class Test{
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in); System.out.println("请输入一个密码(不大于八位):");
int n = sc.nextInt();
int[] arr=new int[8];
int index=0; for(;n>0;n=n/10) {
arr[index]=n%10;
arr[index]+=5;
arr[index]%=10;
index++;
}
int temp=arr[index];
arr[index]=arr[0];
arr[0]=temp; for(int i=0;i<index;i++) {
System.out.print(arr[i]);
}
}
}

3、面向对象

1)面向对象就是不断创建对象,指挥对象做事情

2)面向对象设计:管理和维护对象之间的关系

3)面向对象的特征:封装、继承、多态

4)类与对象的关系:属性、行为 ,JAVA中最基本的单位是类

事物:属性、行为

类:成员变量、成员方法(初学者把static 先去掉) ,与之前的变量、方法格式并无区别

类是一组相关的属性和行为的集合,是一个抽象的概念

对象是该类事物的具体表现形式,具体存在的个体

4、对象

1)创建对象:类名 对象名=new 类名();

2)使用成员变量:对象名.变量名

使用成员方法:对象名.方法名(参数列表);

3)赋值:对象名.变量名=

4)内存图解(一个对象):



5)两个对象



6)成员变量和局部变量的区别

①类中的位置不同:类中方法外/方法内或方法声明上

②内存中的位置不同:堆内存/栈内存

③生命周期不同:随着对象的存在而存在,随着对象的消失而消失

/随着方法的调用而存在,随着方法调用完毕而消失

④初始化值不同:成员变量:有默认的初始化值

局部变量:没有默认的初始化值,必须先定义,赋值,才能使用

局部变量名称可以与成员变量名称相同,在方法中使用采用的是就近原则、

@例题6:学生类的定义与使用

class Student{
//定义变量
String name;
int age;
String address;
//定义方法
public void study(){...;}
public void eat(){...;}
public void play(){...;}
} /*使用(在一个java文件中写两个类,一个基本的类,一个测试类。文件名应与测试类名称一致)*/
class Test{
public static void main(String args[]){
Student s = new Student();
//创建对象,s.name=null,s.age=0,s,address=null
s.name="jack";
s.age=23;
s.eat();
s.sleep();
}
}

5、形式参数

1)基本类型、引用类型

2) 类是引用类型

3)方法的形参是类名的时候如何调用?

如果一个方法的形式参数是一个类类型(引用类型),这里需要的是该类的对象

6、匿名对象

1)没有名字的对象:

eg:new 类名();

2)应用场景:

①调用方法,仅仅只调用一次的时候

优点:匿名对象调用完毕后即被回收

eg: new 类名().方法名();

②可作为实参传递

方法名(new 类名());

new StudentDemo().method((new Student());

上述例子中:构造了两个匿名对象,可用于调用方法。

7、封装

1)概述:指将隐藏对象的属性和实现细节,仅对外提供公共访问方式

2)优点:①隐藏实现细节,提供公共访问方式

②提高代码复用性

③提高安全性

3)原则:将不需要对外提供的内容都隐藏起来且把属性隐藏,提供公共方式对其访问

4)关键字:private

被private修饰的成员变量及方法仅能在本类中访问

8、private 关键字

1)权限修饰符,可修饰成员变量和成员方法

2)应用:修饰成员变量,提供对应的getxxx()/setxxx()方法

@例题:封装与private 的应用 :学生类的重新定义

class Student{
private String name;
private int age; public int getName(){
return name;
}
public int getAge(){
return age;
}
public void setName(String s){
name=s;
}
public void setAge(int i){
age=i;
}
}

9、this关键字

1) 所在类的对象引用

格式:this.本类变量名

局部变量隐藏成员变量

例如:

public void setAge(int age){
//age=age;
//错误,由于就近原则赋值失败,系统不能区分左边的是成员变量,右边是局部变量
this.age=age;//正确
}

2)图解

JAVA自学笔记06的更多相关文章

  1. JAVA自学笔记09

    JAVA自学笔记09 1.子类的方法会把父类的同名方法覆盖(重写) 2.final: 1)可修饰类.方法.变量 2)修饰类时:此时该类变为最终类,它将无法成为父类而被继承 3)修饰方法时:该方法将无法 ...

  2. JAVA自学笔记05

    JAVA自学笔记05 1.方法 1)方法就是完成特定功能的代码块,类似C语言中的函数. 2)格式: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2,-){ 函数体; return ...

  3. JAVA自学笔记04

    JAVA自学笔记04 1.switch语句 1)格式:switch(表达式){ case 值1: 语句体1; break; case 值2: 语句体2; break; - default: 语句体n+ ...

  4. JAVA自学笔记07

    JAVA自学笔记07 1.构造方法 1) 例如:Student s = new Student();//构造方法 System.out.println(s);// Student@e5bbd6 2)功 ...

  5. JAVA自学笔记10

    JAVA自学笔记10 1.形式参数与返回值 1)类名作为形式参数(基本类型.引用类型) 作形参必须是类的对象 2)抽象类名作形参 需要该抽象类的子类对象,通过多态实现 3)接口名为形参 需要的是该接口 ...

  6. JAVA自学笔记13

    JAVA自学笔记13 1.StringBuffer类 1)线程安全的可变字符序列 线程安全(即同步) 2)StringBuffer与String的区别:一个可变一个不可变 3)构造方法: ①publi ...

  7. JAVA自学笔记11

    JAVA自学笔记11 1:Eclipse的安装 2:用Eclipse写一个HelloWorld案例,最终在控制台输出你的名字 A:创建项目 B:在src目录下创建包.cn.itcast C:在cn.i ...

  8. JAVA自学笔记14

    JAVA自学笔记14 1.正则表达式 1)是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串.其实就是一种规则.有自己的特殊应用 2)组成规则: 规则字符在java.util.rege ...

  9. JAVA自学笔记12

    JAVA自学笔记12 1.Scanner 1)JDK5后用于获取用户的键盘输入 2)构造方法:public Scanner(InputStream source) 3)System.in 标准的输入流 ...

随机推荐

  1. 关于浏览器对html, js,css的解析先后顺序的理解

    1.首先要了解页面的结构(包含哪些元素?哪些计算机语言能够在页面中运行 ) (1)html          不仅可以包含文字,还可以包含图片.链接,甚至音乐.程序等非文字元素的标记语言       ...

  2. python全栈开发day86-CRM增删改查 分页

    知识点梳理: 1.分页器保存搜索条件 2.ORM批量插入数据bulk_create 批量创建model实例,在用bulk_create 一次插入数据库 3.自定义不同表的不同字段ModelForm错误 ...

  3. python全栈开发day80--评论楼、评论树

    内容总结: 1. 内容回顾 1. 内容回顾 1.评论 1. 展示评论 1. 评论楼(Django模板语言渲染) 1. 从后端查询出所有的评论 2. 如果有父评论就展示父评论 2. 评论树 通过ajax ...

  4. MySQL事务提交过程(一)

    MySQL作为一种关系型数据库,已被广泛应用到互联网中的诸多项目中.今天我们来讨论下事务的提交过程. MySQL体系结构 由于mysql插件式存储架构,导致开启binlog后,事务提交实质是二阶段提交 ...

  5. Codeforces 653F Paper task SA

    Paper task 如果不要求本质不同直接st表二分找出最右端, 然后计数就好了. 要求本质不同, 先求个sa, 然后用lcp求本质不同就好啦. #include<bits/stdc++.h& ...

  6. c#生成连续单号

    bill.BillCode = GetBillCode("JH");//生成单号 if (bill.BillCode == "no") { bill.BillC ...

  7. weka的基本使用

    目录: 1. 简介 2.界面初识 3.数据格式 4.数据准备 5.关联规则 6.分类与回归 7.聚类分析 8.Weka相关资料 9.Weka二次开发 10.Weka源代码导入 1. 简介 WEKA的全 ...

  8. string通过逗号分割不用split方法

    package com.simon; import java.util.ArrayList; import java.util.Iterator; import java.util.List; pub ...

  9. SVM—PK—BP:SVR(better)和BP两种方法比较且实现建筑物钢筋混凝土抗压强度预测—Jason niu

    load concrete_data.mat n = randperm(size(attributes,2)); p_train = attributes(:,n(1:80))'; t_train = ...

  10. java接口签名(Signature)实现方案

    预祝大家国庆节快乐,赶快迎接美丽而快乐的假期吧!!! 一.前言 在为第三方系统提供接口的时候,肯定要考虑接口数据的安全问题,比如数据是否被篡改,数据是否已经过时,数据是否可以重复提交等问题.其中我认为 ...