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 标准的输入流 ...
随机推荐
- javascript 语句和严格模式(三)
一.语句 javascript程序由语句组成,语句遵守特定的语法规则. block break continue empty if...else switch try catch var functi ...
- react-native-video
<Video ref='videoPlayer' source={{uri:'http://www.thinktown.com/video/th.mp4'}} //网络视频 //source={ ...
- nginx 设置自签名证书以及设置网址http强制转https访问
自签名证书可以在自己的内网环境或者非对外环境使用,保证通信安装 1.生产证书 直接使用脚本生产: 中途会提示书如1次域名和4次密码,把一下文件保存为sh文件,赋予x权限后 直接执行,根据提示输入. # ...
- hibnet 自动生成表格
在pom文件中添加相关的依赖 在application.yml文件中添加配置信息 新建实体类Boy 项目运行,mysql就产生了一个boy表. 需要注意的是:当配置文件ddl-auto: create ...
- Codeforces 235C Cyclical Quest 字符串 SAM KMP
原文链接https://www.cnblogs.com/zhouzhendong/p/CF235C.html 题目传送门 - CF235C 题意 给定一个字符串 $s$ ,多组询问,每组询问的形式为 ...
- Linux安装Tomcat-Nginx-FastDFS-Redis-Solr-集群——【第十一集之安装FastDFS】
1,安装FastDFS之前,先安装libevent工具包. yum -y install libevent 2,安装libfastcommonV1.0.7工具包.有可能找到新版本的zip压缩包:lib ...
- JavaSE| 包装类| 时间
包装类 * 因为Java是面向对象的语言,所以很多API或新特性都是针对“对象”来设计的,但是Java设计之初时,是C语言很盛行的时候,所以Java保留了C语言中的8种基本数据类型, 保留它们有好处, ...
- 000 Security的计划
可重用的,企业级的,认证和授权模块 1.主要涉及的模块 2.最终的目标 3.开发的项目模块结构
- quratz线程
1.线程 在 Quartz 中,有两类线程,Scheduler 调度线程和任务执行线程,其中任务执行线程通常使用一个线程池维护一组线程. 2.调度线程 下面说明两种调度线程: Scheduler 调度 ...
- ESP8266基础篇
ESP8266基础篇 模块刚到如图所示~2016-01-26 后三张是手机APP的截图,前面是两个ESP8266的硬件模块,当然大家不应定要买两个,自己焊锡一个USB转TTL的串口就行了,有了下面的底 ...