Java的基本语法
对HelloWorld.java的解释
定义类(其中 public 是类的修饰符 class表示该java文件是个类 HelloWorld是类名)
定义区块(用大括号{}表示类的范围和方法的范围)
定义main方法(这是java程序的入口)
在main方法中需要执行的语句(在main方法的定义区块内写main方法要执行的程序)
public class HelloWorld {
public static void main(String[] args) {
System.out.println("你好!兄弟们!");
}
}
Java的注释解释
Java的中的注释分单行注释,多行注释,文档注释
单行注释://注释
多行注释:/*注释*/
文档注释:/**文档注释内容*/
手册文档的作用
多行注释可以嵌套单行注释
对Scanner的使用
Scanner类可以用来接收用户从控制台输入的信息,该类在我们的Java基础阶段会经常使用
用于辅助教学,但在实际工作中基本不用。
运行结果为
在java中print 和println输出的区别
打印效果
Java中常用的转义符
\\ 反斜杠
\’ 单引号
\” 双引号
\n 换行
\t 跳格(tab 键)
Printf的使用
%% 在字符串中显示%
%d 以10进位整数方式输出,提供的数必须是Byte、Short、 Integer、Long、或BigInteger
%f 将浮点数以10进位方式输出,提供的数必须是Float、Double或 BigDecimal
%e, %E 将浮点数以10进位方式输出,并使用科学记号,提供的数必须是Float、 Double或BigDecimal
%s, %S 将字符串格式化输出 (S代表以大写形式输出)
%c
%b, %B 将"true"或"false"输出(或"TRUE"、"FALSE",使用 %B)。另外,非null值输出是"true",null值输出是"false"
Printf是可以使用占位符的输出也可以进行格式化输出
如果输入中文出现乱码请在运行配置中配置console 控制台编码(将编码改为gbk)
Java中的基本数据类型(Primitive type)
整数(java中整数会根据前面的变量自动匹配)
字节 (byte)
专门储存位数据
占一个字节 (-128至127) (-1*2的七次方 ~ 2的七次方)
短整数(short)(占2个字节)(-32768至32767)
整数(int)(占4个字节)
(-2147483648至2147483647)
长整数(long)(占8个字节)(通常后面加L)
(-9223372036854775808至9223372036854775807)
浮点数(java存放浮点型默认用的就是double)
浮点数(float)(占4个字节) (通常后面加F)
(1.401298e-45至3.402823e+38) (有效小数位6-7位)
双精度浮点数(double)(占8个字节) (通常后面加D)
(4.900000e-324至1.797693e+308) (有效小数位15位)
字符 (char)
采Unicode编码
前128个字符编码与ASCII编码兼容
每个字符数据类型占两个字节
可储存的字符范围由'\u0000'到'\uFFFF‘
无论是一个数字,一个字母还是一个汉字在Java中都是一个字符,字符用单引号引起 ‘A’ ‘1’ ‘你’
布尔型 (boolean)
占内存2个字节
可储存true与false两个数值,在Java中布尔型只有true和false两个值,没有0和1,yes和no.
变量和常量
运算符
注意 1、加号 在数据运算中表示数字相加。在字符串参与时表示字符串相连接
2、/ 当整数除整数时表示取模(取整),有一个为字符型(则结果为浮点型)
(即整型和整型(/,%)运算结果一定为整数)(有浮点型参与的运算(/,%)结果为浮点型)
3、注意byte,short,char的运算会响转化为int进行运算
//再谈printf
再谈基本数据类型(转型之向下强转)
(精确度的大小有两个个标准1、浮点数中允许小数的位数(位数越多精度越高) (即浮点数一定比整数精度要高)2、如果同为整数则精度是(所占字节数越高精度越高))
在Java中低精度类型会自动向上转型的,如果从高精度到低精度需要强转。(注布尔型不参与转型)(如果long向float转型 float会采用科学记数法的方式来转型)
类型byte,short,char 类型在运算时,会自动转型成int
比较运算符
这六种比较数据类型适合所有基本数据类型之间的比较,比较的结果是个布尔型。(布尔型只能和布尔型之间比较)
条件运算符(又称三元运算符)
题目计算一个数是否为奇数
逻辑运算符
逻辑运算符两侧必须是布尔型数据(逻辑运算符单侧运算如果一侧成立了另一侧将不被执行 例如 比较式1&&比较2如果比较式1为false则比较式2将不会进行比较)
位运算(了解)
知道8421快速算法
利用&判断数的奇偶(掌握)
利用^进行简单的加密(了解)
递增运算和递减运算符
(注意:递增和递减运算符一定是要写在变量上 如:++8这是不可以的)
将递增或递减运算符写在变量之前,是先加一(减一)运算,然后赋值。
将递增或递减运算符写在变量之后,是先赋值,然后进行加一(减一)运算。
自运算符列表
自运算和正常赋值运算(在结果转型方面小有差别:自运算可实现自动转型)
条件语句 IF
题目用 if else 语句求 奇偶数
注意在一组条件判断语句中else if 可以有多个 但是 if else 只能有一个
Switch (条件选择器)
Case中只能是 byte,short,int,char还有枚举类型 所以 switch中千万不能写比较式。
switch(n)
{
case n1:statement;break;
case n2:statement:break;
......
default:statement
}
n为选择因子(变量,表达式),其作用就是作为分支条件的判断,其值一旦和某个case的常数匹配成功,就会执行其后的语句,并且直到遇到break语句为止。这意味着,如果一个case后无break语句,它不会跳出,会继续按顺序执行下一个case语句,直到其后有break语句或所有后面case语句执行完了为止。 注意n1,n2...必须为常量
题目:打印一个学生的分数等级(100满分)90分以上A,80分以上B,70分以上C,
60分以上D,其它情况不及格
题目:根据你输入的日期算出该月有多少天
(闰年 满足(能被400整除)或(能被4整除并且不能被100整除))
Scanner scanner = new Scanner(System.in);
//得到年份
System.out.println("请输入年份:");
int year = scanner.nextInt();
//得到月份
System.out.println("请输入月份:");
int month = scanner.nextInt();
//判断出该月有多少天
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
System.out.println("31天");
break;
case 2:
//判断是否为闰年
if(year%400==0 || (year%4==0 && year%100 !=0))
{
System.out.println("29天");
}
else
{
System.out.println("28天");
}
break;
case 4:
case 6:
case 9:
case 11:
System.out.println("30天");
break;
}
for循环
(for循环的使用场景:能确定循环得次数)
题目:输入学生的人数和分数,算出这个班的平均值
题目:九九乘法表
/**
*
* 正三角九九乘法表*/
public static void lx1()
{
for(int i=1;i<=9;i++)
{
for(int j=1;j<=i;j++)
{
//System.out.print(i+"*"+j+"\t");
System.out.printf("%d*%d=%d\t",i,j,(i*j));
}
System.out.println();
}
}
public static void lx2()
{
for(int i=9;i>=1;i--)
{
for(int j=1;j<=i;j++)
{
System.out.printf("%d*%d=%d\t",j,i,(j*i));
}
System.out.println();
}
}
public static void lx3()
{
for(int i=9;i>=1;i--)
{
for(int k=1;k<=(9-i);k++)
{
System.out.print("\t");//打印出空格
}
for(int j=1;j<=i;j++)
{
System.out.printf("%d*%d=%d\t",j,i,(j*i));
}
System.out.println();
}
}
public static void lx4()
{
for(int i=1;i<=9;i++)
{
for(int k=1;k<=(9-i);k++)
{
System.out.print("\t");//打印出空格
}
for(int j=1;j<=i;j++)
{
System.out.printf("%d*%d=%d\t",j,i,(j*i));
}
System.out.println();
}
}
题目:打印出如下的图形
break 和 continue的区别
break表示跳出循环,continue表示跳出本次循环从下次循环开始运算
while()循环
while(循环成立的条件)
{
执行的代码
}
题目:给难民发放粮食(输入粮食的总量,和每个难民领的次数)计算有多少难民领取了粮食,还剩多少粮食
do while()循环
do{}while(循环成立的条件);
题目:银行卡取款(假定您卡有16000,输入你每次要提款的钱数,计算你提款的次数和卡内余额,输入零表示退出)
练习
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,
小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少 对
//这是一个菲波拉契数列问题
分析思路:
小 中 大
1 0 0 1
0 1 0 1
1 0 1 2 ------3
1 1 1 3 ------4
2 1 2 5 -------5
3 2 3 8 ------6
题目:判断101-200之间有多少个素数,并输出所有素数。
程序分析:什么叫素数呢?除了1和本身不能被任何数整除 的数叫素数
题目:打印出1到999所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。
题目:输入某年某月某日判断这一天是这一年的第几天(需要考虑闰年的情况,能被400整除或者能被4整除但不能被100整除)
题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),要求用户自主录入相加的数和相加的项数
题目:一个数如果恰好等于它的因子(如果一个数能够被一个不是它自身的数整除那么这个数就是它的因子)之和,这个数就称为 "完数 "。例如6=1+2+3.编程 找出1000以内的所有完数。并显示出所属因子
题目:有1、2、3、4四个数字,能组成多少个互不相同且无重复数字的三位数 都是多少
题目:输入三个整数x,y,z,请把这三个数由小到大输出。
常用的数学函数
其中,重点强调一下 Math.random()方法,返回的是0到1 的随机小数,其值的范围是大于等于0,小于一
4、基本 数据类型的封装类(自动装箱和拆箱)
初识对象
思考一个问题
以上问题可以实现吗?
对象是具有一些行为功能的实体。对象存在于(堆中)。
类就像是设计图(类中会设计对象所具有的功能)。对象就像是按这张设计图设计出的具体的东西。对象可以提供各种各样的方法,让你操作。
类 类的变量名(对象的引用) 创建一个对象
例如: Scanner scan = new Scanner(System.in)
该对象可以从控制台获得信息
再如:
封装类
在java中基本数据类型并不是对象,它们只是纯粹的数据,除了数值本身的信息以外,基本数据类型不带有其它的信息或操作方法。
而对象本身可以带更多的信息,和方法。
如果基本数据类型要是以对象存在就会用到它们的包装类:
这些包装类都可以包装对应的基本数据类型。而且还提供了相应的方法
基本数据类型存在的意义
既然java是面向对象的语言,java中又包含了很多的类。比如integer类,为什么还需要基本数据类型,比如int。例如这些类不是也可以解决问题吗?
基本数据类型是用的最频繁的类型。
而且占用存储空间小,可以把它们存入栈中,实现快速的操作。
而他们的封装类Integer等,必需创建对象实例,在堆中开辟内存,既消耗资源,又耗费时间。
装箱和拆箱
将一个基本的数据类型转换为它的包装类,这个过程叫装箱
手动装箱
2、自动拆箱(jdk1.5之后的新特性)
将一个包装类转换为它的基本的数据类型,这个过程叫拆箱
1、手动拆箱
自动拆箱(jdk1.5之后的新特性)
对==号的深入解释
首先对象存在在堆中,而变量存在在栈中对象变量中存放的是对象在堆中的内存地址。基本数据类型中存放的就是它代表的值
所以比较两个对象的值是否相等不能用==,要用equals
小心使用自动拆装箱
所以强烈建议有意识地使用手动拆装箱
Null 和 “”的解释
注意基本数据类型不能引用null
数组
什么是数组
数组(Array)本质上是一组数据的群组,每个数据会有一个索引值(index),只要指定索引值就可以取出对应的数据。(数组也是对象)
创建数组的方法
一维数组的初始值
数组的访问
牢记数组的操作,必须依靠索引值。
题目:遍历数组中的数据
//提醒:数组长度一旦定义,它的长度就不可以改变了,没有定义数组长度之前可以动态定义数组的长度
题目:输入班级人数,并把每个学生的成绩放入到数组中,并显示出来
题目:冒泡排序
题目:将末尾放到首位其它位平移
二维数组
二维数组说白了就是: 数组里边装数组
二维数组的声明方法
二维数组的遍历方法
二维数组的length属性表示行数,而且每行装的数组长度是不能一样的
再谈null值
//思考一下 arr1[1]= null为什么会错呢
//再考虑一下
数组拷贝
题目:将数组a1,拷贝给数组a2
依靠 System. arraycopy(Object src,
int srcPos,
Object dest,
int destPos,
int length)方法进行数组的拷贝
参数:
src - 源数组。
srcPos - 源数组中的起始位置。
dest - 目标数组。
destPos - 目标数据中的起始位置。
length - 要复制的数组元素的数量。
数组的工具类(java.util.Arrays)
Foreach循环
任何类型都可以创建它的数组形式
题目:将九九乘法表装装入String[][]数组中
数组练习
题目:找出2个已知数组中相同的值。
题目:比较两个int[] 数组是否相等(仿写Arrays.equals方法)
题目:仿写System. arraycopy(Object src, int srcPos, Object dest, int destPos, int length)方法.
题目:给定一个int[] 要求将数组中的奇数放到一个数组中,将偶数放入一个数组中并将奇,偶数组打印。
/*
* 给定一个int[] 要求将数组中的奇数放到一个数组中,
* 将偶数放入一个数组中并将奇,偶数组打印。
* */
public static void lx6()
{
int[] arr ={12,43,56,12,90,78,23,21};
//计算一下arr中有多少奇数和多少偶数
int os_num =0;
for(int num_arr : arr)
{
if(num_arr%2==0)
{
os_num++;
}
}
//怎么样对这两个数组进行实例化
int[] js_arr = new int[arr.length-os_num];
int[] os_arr = new int[os_num];
//目标是要将偶数放入os_arr,奇数放入js_arr
int index_os =0;
int index_js=0;
for(int i=0;i<arr.length;i++)
{
if(arr[i]%2==0)
{
os_arr[index_os] =arr[i];
index_os++;
}
else
{
js_arr[index_js] = arr[i];
index_js ++;
}
}
System.out.println("奇数是:");
for(int sj : js_arr)
{
System.out.print(sj+"\t");
}
System.out.println();
System.out.println("偶数是:");
for(int os : os_arr)
{
System.out.print(os+"\t");
}
System.out.println();
}
对HelloWorld.java的解释
定义类(其中 public 是类的修饰符 class表示该java文件是个类 HelloWorld是类名)
定义区块(用大括号{}表示类的范围和方法的范围)
定义main方法(这是java程序的入口)
在main方法中需要执行的语句(在main方法的定义区块内写main方法要执行的程序)
public class HelloWorld {
public static void main(String[] args) {
System.out.println("你好!兄弟们!");
}
}
Java的注释解释
Java的中的注释分单行注释,多行注释,文档注释
单行注释://注释
多行注释:/*注释*/
文档注释:/**文档注释内容*/
手册文档的作用
多行注释可以嵌套单行注释
对Scanner的使用
Scanner类可以用来接收用户从控制台输入的信息,该类在我们的Java基础阶段会经常使用
用于辅助教学,但在实际工作中基本不用。
运行结果为
在java中print 和println输出的区别
打印效果
Java中常用的转义符
\\ 反斜杠
\’ 单引号
\” 双引号
\n 换行
\t 跳格(tab 键)
Printf的使用
%% 在字符串中显示%
%d 以10进位整数方式输出,提供的数必须是Byte、Short、 Integer、Long、或BigInteger
%f 将浮点数以10进位方式输出,提供的数必须是Float、Double或 BigDecimal
%e, %E 将浮点数以10进位方式输出,并使用科学记号,提供的数必须是Float、 Double或BigDecimal
%s, %S 将字符串格式化输出 (S代表以大写形式输出)
%c
%b, %B 将"true"或"false"输出(或"TRUE"、"FALSE",使用 %B)。另外,非null值输出是"true",null值输出是"false"
Printf是可以使用占位符的输出也可以进行格式化输出
如果输入中文出现乱码请在运行配置中配置console 控制台编码(将编码改为gbk)
Java中的基本数据类型(Primitive type)
整数(java中整数会根据前面的变量自动匹配)
字节 (byte)
专门储存位数据
占一个字节 (-128至127) (-1*2的七次方 ~ 2的七次方)
短整数(short)(占2个字节)(-32768至32767)
整数(int)(占4个字节)
(-2147483648至2147483647)
长整数(long)(占8个字节)(通常后面加L)
(-9223372036854775808至9223372036854775807)
浮点数(java存放浮点型默认用的就是double)
浮点数(float)(占4个字节) (通常后面加F)
(1.401298e-45至3.402823e+38) (有效小数位6-7位)
双精度浮点数(double)(占8个字节) (通常后面加D)
(4.900000e-324至1.797693e+308) (有效小数位15位)
字符 (char)
采Unicode编码
前128个字符编码与ASCII编码兼容
每个字符数据类型占两个字节
可储存的字符范围由'\u0000'到'\uFFFF‘
无论是一个数字,一个字母还是一个汉字在Java中都是一个字符,字符用单引号引起 ‘A’ ‘1’ ‘你’
布尔型 (boolean)
占内存2个字节
可储存true与false两个数值,在Java中布尔型只有true和false两个值,没有0和1,yes和no.
变量和常量
运算符
注意 1、加号 在数据运算中表示数字相加。在字符串参与时表示字符串相连接
2、/ 当整数除整数时表示取模(取整),有一个为字符型(则结果为浮点型)
(即整型和整型(/,%)运算结果一定为整数)(有浮点型参与的运算(/,%)结果为浮点型)
3、注意byte,short,char的运算会响转化为int进行运算
//再谈printf
再谈基本数据类型(转型之向下强转)
(精确度的大小有两个个标准1、浮点数中允许小数的位数(位数越多精度越高) (即浮点数一定比整数精度要高)2、如果同为整数则精度是(所占字节数越高精度越高))
在Java中低精度类型会自动向上转型的,如果从高精度到低精度需要强转。(注布尔型不参与转型)(如果long向float转型 float会采用科学记数法的方式来转型)
类型byte,short,char 类型在运算时,会自动转型成int
比较运算符
这六种比较数据类型适合所有基本数据类型之间的比较,比较的结果是个布尔型。(布尔型只能和布尔型之间比较)
条件运算符(又称三元运算符)
题目计算一个数是否为奇数
逻辑运算符
逻辑运算符两侧必须是布尔型数据(逻辑运算符单侧运算如果一侧成立了另一侧将不被执行 例如 比较式1&&比较2如果比较式1为false则比较式2将不会进行比较)
位运算(了解)
知道8421快速算法
利用&判断数的奇偶(掌握)
利用^进行简单的加密(了解)
递增运算和递减运算符
(注意:递增和递减运算符一定是要写在变量上 如:++8这是不可以的)
将递增或递减运算符写在变量之前,是先加一(减一)运算,然后赋值。
将递增或递减运算符写在变量之后,是先赋值,然后进行加一(减一)运算。
自运算符列表
自运算和正常赋值运算(在结果转型方面小有差别:自运算可实现自动转型)
条件语句 IF
题目用 if else 语句求 奇偶数
注意在一组条件判断语句中else if 可以有多个 但是 if else 只能有一个
Switch (条件选择器)
Case中只能是 byte,short,int,char还有枚举类型 所以 switch中千万不能写比较式。
switch(n)
{
case n1:statement;break;
case n2:statement:break;
......
default:statement
}
n为选择因子(变量,表达式),其作用就是作为分支条件的判断,其值一旦和某个case的常数匹配成功,就会执行其后的语句,并且直到遇到break语句为止。这意味着,如果一个case后无break语句,它不会跳出,会继续按顺序执行下一个case语句,直到其后有break语句或所有后面case语句执行完了为止。 注意n1,n2...必须为常量
题目:打印一个学生的分数等级(100满分)90分以上A,80分以上B,70分以上C,
60分以上D,其它情况不及格
题目:根据你输入的日期算出该月有多少天
(闰年 满足(能被400整除)或(能被4整除并且不能被100整除))
Scanner scanner = new Scanner(System.in);
//得到年份
System.out.println("请输入年份:");
int year = scanner.nextInt();
//得到月份
System.out.println("请输入月份:");
int month = scanner.nextInt();
//判断出该月有多少天
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
System.out.println("31天");
break;
case 2:
//判断是否为闰年
if(year%400==0 || (year%4==0 && year%100 !=0))
{
System.out.println("29天");
}
else
{
System.out.println("28天");
}
break;
case 4:
case 6:
case 9:
case 11:
System.out.println("30天");
break;
}
for循环
(for循环的使用场景:能确定循环得次数)
题目:输入学生的人数和分数,算出这个班的平均值
题目:九九乘法表
/**
*
* 正三角九九乘法表*/
public static void lx1()
{
for(int i=1;i<=9;i++)
{
for(int j=1;j<=i;j++)
{
//System.out.print(i+"*"+j+"\t");
System.out.printf("%d*%d=%d\t",i,j,(i*j));
}
System.out.println();
}
}
public static void lx2()
{
for(int i=9;i>=1;i--)
{
for(int j=1;j<=i;j++)
{
System.out.printf("%d*%d=%d\t",j,i,(j*i));
}
System.out.println();
}
}
public static void lx3()
{
for(int i=9;i>=1;i--)
{
for(int k=1;k<=(9-i);k++)
{
System.out.print("\t");//打印出空格
}
for(int j=1;j<=i;j++)
{
System.out.printf("%d*%d=%d\t",j,i,(j*i));
}
System.out.println();
}
}
public static void lx4()
{
for(int i=1;i<=9;i++)
{
for(int k=1;k<=(9-i);k++)
{
System.out.print("\t");//打印出空格
}
for(int j=1;j<=i;j++)
{
System.out.printf("%d*%d=%d\t",j,i,(j*i));
}
System.out.println();
}
}
题目:打印出如下的图形
break 和 continue的区别
break表示跳出循环,continue表示跳出本次循环从下次循环开始运算
while()循环
while(循环成立的条件)
{
执行的代码
}
题目:给难民发放粮食(输入粮食的总量,和每个难民领的次数)计算有多少难民领取了粮食,还剩多少粮食
do while()循环
do{}while(循环成立的条件);
题目:银行卡取款(假定您卡有16000,输入你每次要提款的钱数,计算你提款的次数和卡内余额,输入零表示退出)
练习
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,
小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少 对
//这是一个菲波拉契数列问题
分析思路:
小 中 大
1 0 0 1
0 1 0 1
1 0 1 2 ------3
1 1 1 3 ------4
2 1 2 5 -------5
3 2 3 8 ------6
题目:判断101-200之间有多少个素数,并输出所有素数。
程序分析:什么叫素数呢?除了1和本身不能被任何数整除 的数叫素数
题目:打印出1到999所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。
题目:输入某年某月某日判断这一天是这一年的第几天(需要考虑闰年的情况,能被400整除或者能被4整除但不能被100整除)
题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),要求用户自主录入相加的数和相加的项数
题目:一个数如果恰好等于它的因子(如果一个数能够被一个不是它自身的数整除那么这个数就是它的因子)之和,这个数就称为 "完数 "。例如6=1+2+3.编程 找出1000以内的所有完数。并显示出所属因子
题目:有1、2、3、4四个数字,能组成多少个互不相同且无重复数字的三位数 都是多少
题目:输入三个整数x,y,z,请把这三个数由小到大输出。
常用的数学函数
其中,重点强调一下 Math.random()方法,返回的是0到1 的随机小数,其值的范围是大于等于0,小于一
4、基本 数据类型的封装类(自动装箱和拆箱)
初识对象
思考一个问题
以上问题可以实现吗?
对象是具有一些行为功能的实体。对象存在于(堆中)。
类就像是设计图(类中会设计对象所具有的功能)。对象就像是按这张设计图设计出的具体的东西。对象可以提供各种各样的方法,让你操作。
类 类的变量名(对象的引用) 创建一个对象
例如: Scanner scan = new Scanner(System.in)
该对象可以从控制台获得信息
再如:
封装类
在java中基本数据类型并不是对象,它们只是纯粹的数据,除了数值本身的信息以外,基本数据类型不带有其它的信息或操作方法。
而对象本身可以带更多的信息,和方法。
如果基本数据类型要是以对象存在就会用到它们的包装类:
这些包装类都可以包装对应的基本数据类型。而且还提供了相应的方法
基本数据类型存在的意义
既然java是面向对象的语言,java中又包含了很多的类。比如integer类,为什么还需要基本数据类型,比如int。例如这些类不是也可以解决问题吗?
基本数据类型是用的最频繁的类型。
而且占用存储空间小,可以把它们存入栈中,实现快速的操作。
而他们的封装类Integer等,必需创建对象实例,在堆中开辟内存,既消耗资源,又耗费时间。
装箱和拆箱
将一个基本的数据类型转换为它的包装类,这个过程叫装箱
手动装箱
2、自动拆箱(jdk1.5之后的新特性)
将一个包装类转换为它的基本的数据类型,这个过程叫拆箱
1、手动拆箱
自动拆箱(jdk1.5之后的新特性)
对==号的深入解释
首先对象存在在堆中,而变量存在在栈中对象变量中存放的是对象在堆中的内存地址。基本数据类型中存放的就是它代表的值
所以比较两个对象的值是否相等不能用==,要用equals
小心使用自动拆装箱
所以强烈建议有意识地使用手动拆装箱
Null 和 “”的解释
注意基本数据类型不能引用null
数组
什么是数组
数组(Array)本质上是一组数据的群组,每个数据会有一个索引值(index),只要指定索引值就可以取出对应的数据。(数组也是对象)
创建数组的方法
一维数组的初始值
数组的访问
牢记数组的操作,必须依靠索引值。
题目:遍历数组中的数据
//提醒:数组长度一旦定义,它的长度就不可以改变了,没有定义数组长度之前可以动态定义数组的长度
题目:输入班级人数,并把每个学生的成绩放入到数组中,并显示出来
题目:冒泡排序
题目:将末尾放到首位其它位平移
二维数组
二维数组说白了就是: 数组里边装数组
二维数组的声明方法
二维数组的遍历方法
二维数组的length属性表示行数,而且每行装的数组长度是不能一样的
再谈null值
//思考一下 arr1[1]= null为什么会错呢
//再考虑一下
数组拷贝
题目:将数组a1,拷贝给数组a2
依靠 System. arraycopy(Object src,
int srcPos,
Object dest,
int destPos,
int length)方法进行数组的拷贝
参数:
src - 源数组。
srcPos - 源数组中的起始位置。
dest - 目标数组。
destPos - 目标数据中的起始位置。
length - 要复制的数组元素的数量。
数组的工具类(java.util.Arrays)
Foreach循环
任何类型都可以创建它的数组形式
题目:将九九乘法表装装入String[][]数组中
数组练习
题目:找出2个已知数组中相同的值。
题目:比较两个int[] 数组是否相等(仿写Arrays.equals方法)
题目:仿写System. arraycopy(Object src, int srcPos, Object dest, int destPos, int length)方法.
题目:给定一个int[] 要求将数组中的奇数放到一个数组中,将偶数放入一个数组中并将奇,偶数组打印。
/*
* 给定一个int[] 要求将数组中的奇数放到一个数组中,
* 将偶数放入一个数组中并将奇,偶数组打印。
* */
public static void lx6()
{
int[] arr ={12,43,56,12,90,78,23,21};
//计算一下arr中有多少奇数和多少偶数
int os_num =0;
for(int num_arr : arr)
{
if(num_arr%2==0)
{
os_num++;
}
}
//怎么样对这两个数组进行实例化
int[] js_arr = new int[arr.length-os_num];
int[] os_arr = new int[os_num];
//目标是要将偶数放入os_arr,奇数放入js_arr
int index_os =0;
int index_js=0;
for(int i=0;i<arr.length;i++)
{
if(arr[i]%2==0)
{
os_arr[index_os] =arr[i];
index_os++;
}
else
{
js_arr[index_js] = arr[i];
index_js ++;
}
}
System.out.println("奇数是:");
for(int sj : js_arr)
{
System.out.print(sj+"\t");
}
System.out.println();
System.out.println("偶数是:");
for(int os : os_arr)
{
System.out.print(os+"\t");
}
System.out.println();
}