JAVA自学笔记06
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的更多相关文章
- JAVA自学笔记09
JAVA自学笔记09 1.子类的方法会把父类的同名方法覆盖(重写) 2.final: 1)可修饰类.方法.变量 2)修饰类时:此时该类变为最终类,它将无法成为父类而被继承 3)修饰方法时:该方法将无法 ...
- JAVA自学笔记05
JAVA自学笔记05 1.方法 1)方法就是完成特定功能的代码块,类似C语言中的函数. 2)格式: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2,-){ 函数体; return ...
- JAVA自学笔记04
JAVA自学笔记04 1.switch语句 1)格式:switch(表达式){ case 值1: 语句体1; break; case 值2: 语句体2; break; - default: 语句体n+ ...
- JAVA自学笔记07
JAVA自学笔记07 1.构造方法 1) 例如:Student s = new Student();//构造方法 System.out.println(s);// Student@e5bbd6 2)功 ...
- JAVA自学笔记10
JAVA自学笔记10 1.形式参数与返回值 1)类名作为形式参数(基本类型.引用类型) 作形参必须是类的对象 2)抽象类名作形参 需要该抽象类的子类对象,通过多态实现 3)接口名为形参 需要的是该接口 ...
- JAVA自学笔记13
JAVA自学笔记13 1.StringBuffer类 1)线程安全的可变字符序列 线程安全(即同步) 2)StringBuffer与String的区别:一个可变一个不可变 3)构造方法: ①publi ...
- JAVA自学笔记11
JAVA自学笔记11 1:Eclipse的安装 2:用Eclipse写一个HelloWorld案例,最终在控制台输出你的名字 A:创建项目 B:在src目录下创建包.cn.itcast C:在cn.i ...
- JAVA自学笔记14
JAVA自学笔记14 1.正则表达式 1)是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串.其实就是一种规则.有自己的特殊应用 2)组成规则: 规则字符在java.util.rege ...
- JAVA自学笔记12
JAVA自学笔记12 1.Scanner 1)JDK5后用于获取用户的键盘输入 2)构造方法:public Scanner(InputStream source) 3)System.in 标准的输入流 ...
随机推荐
- bzoj3992
题解: 求模素数 p 原根的方法:对 p-1 进行素因子分解,记pi为p-1的第i个因子,若恒有a^((p-1)/pi) mod p ≠ 1 成立,则 a 就是 p 的原根.(对于合数求原根,只需把 ...
- Ant之build.xml详解
Ant之build.xml详解 关键字: ant build.xml Ant的概念 可能有些读者并不连接什么是Ant以及入可使用它,但只要使用通过Linux系统得读者,应该知道make这个命令.当编译 ...
- dos文件(夹)复制命令:copy和xcopy
1.copy命令 将一份或多份文件复制到另一个位置. COPY [/D] [/V] [/N] [/Y | /-Y] [/Z] [/L] [/A | /B ] source [/A | /B] [+ s ...
- tp5的路由
路由模式:普通.强制和混合 普通模式: //配置文件关闭路由,完全使用默认的PATH_INFO方式URL 'url_route_on' => false, 关闭路由后的普通模式任然可以通过操作方 ...
- HDU 3829 Cat VS Dog (最大独立集)【二分图匹配】
<题目链接> 题目大意: 动物园有n条狗.m头猫.p个小孩,每一个小孩有一个喜欢的动物和讨厌的动物.如今动物园要转移一些动物.假设一个小孩喜欢的动物在,不喜欢的动物不在,他就会happy. ...
- Xamarin Essentials教程检查网络连通性Connectivity
Xamarin Essentials教程检查网络连通性Connectivity 网络连通性其实就是检测当前设备有没有连接网络.网络连通性在很多与网络相关的应用程序中会使用到.在Xamarin中如果 ...
- Spark 常见问题集合
一.Spark 为什么比 MapReduce 要高效? 举一个例子: select a.state,count(*),AVERAGE(c.price) from a join b on (a.id=b ...
- MUI + Spring MVC 实现多图片上传
后台代码,主要是SpringMVC 接收多文件上传,不是用的MutilFiles 方式,主要是因为MUI 5+ 不支持文件上传的Key是同一个名字 private String saveFile(Mu ...
- 在用UEditor往后台传数据写入数据库时,出现错误:从客户端(NewsContent="<p><img src="http://...")中检测到有潜在危险的 Request.。。。
解决办法: 把传数据的方式换了一下,加上 [ValidateInput(false)]就不报错了. 建议看看这个:http://www.360doc.com/content/10/0521/15/46 ...
- Codeforces.666E.Forensic Examination(广义后缀自动机 线段树合并)
题目链接 \(Description\) 给定串\(S\)和\(m\)个串\(T_i\).\(Q\)次询问,每次询问\(l,r,p_l,p_r\),求\(S[p_l\sim p_r]\)在\(T_l\ ...