昨天知识总结:
1.流程控制语句
for while dowhile 循环实例 break,continue 标记 2.函数
全局变量和局部变量
全局变量和局部变量 全局变量:一般我们把直接定义在类中的变量称为全局变量 局部变量:我们将定义在函数,for,if等内部的变量及形参称为局部变量 注意:在一个类的内部我们能直接看到的只有全局变量的定义和函数的定义 生命周期:从定义当前的变量开始,到变量被销毁的过程 作用域:在生命周期内变量可以起作用的范围 全局变量的作用域:整个类,除了static修饰的方法。 局部变量的作用域:从定义当前的变量开始到他所在的函数,for,if等结束. 当变量的生命周期结束的时候,、意味着变量被释放了 区别:
1.作用的范围不同 2.默认值:全局变量如果没有赋值,系统会给默认值----0或null 局部变量必须先赋值后使用
public class demo2 {
int a;
public static void main ( String[ ] args) {
int b;
for ( int i= 0 ; i< 10 ; i++ ) {
int c;
}
}
public void test ( int x) {
int y;
}
}
重载
重载:对于同一个类中的函数,函数名字相同,关系不相同,我们将他的关系成为重载 为什么可以同名?在程序的内部真正识别函数时,识别的是函数名+所有参数的类型 重载的函数本质上是不同的函数 总结注意点:
1.函数名必须相同 2.参数必须不同(类型,个数,位置),但是与参数的名字无关 3.重载与返回值无关 作用:简化代码,方便我们进行操作
public static int sum ( int a, int b) {
int sum = a+ b;
return sum;
}
public static int sum ( int a, int b, int c) {
int sum = a+ b+ c;
return sum;
}
public static int sum ( float a, int b) {
return 3 ;
}
public static int sum ( int a, float b) {
return 3 ;
}
java中的内存分类–栈区和堆区
java内存分成五大块:堆区,栈区,方法区,本地方法区,寄存器 栈区:存放数据的特点是先进后出,存放的数据是局部变量和函数的加载,使用完立即释放, 堆区:存放的是实体(数组和对象),可以同时存储多个数据,实体内部的变量如果不赋值,会被赋值成0 了解:堆中的数据会在某个时刻被释放----通过垃圾回收机制 垃圾回收机制通过一个线程控制,这个县城等级比较低,不会立即被释放
数组
数组:用来存储数据的 解释:是一种引用数据类型,可以同时存储多个相同类型的数据 简单数据类型和引用数据类型的对比
1.都是存的数 2.简单数据类型是直接存储的普通的值,引用数据类型存储的是地址 java将数组第一个中第一个元素的地址,当做数组地址 特点:
1.数组的内存空间是连续的, 2.数组内的元素如果没有赋值会有默认值,对于简单数据类型的元素会赋值0或false 缺点:数组这块空间一旦被开辟出来就不能被改变 new:每new一次会在堆中开辟一块儿新空间,两个数组之间没有任何关系,互不影响 构成:new+元素的类型+[元素的个数] new的功能:
1.在堆内开辟一片空间 2.将当前数组的地址返回,java将数组第一个中第一个元素的地址,当做数组地址 int[3]:中的int,我们存的是什么类型的值,这里就写什么类型。 =前面的int[]是一个整体,代表int型数组这种类型 arr中存储的是数组的地址,arr就是数据存储类型 注意点:
ArrayIndexOutOfBoundsException: 数组下标越界异常,下标超出了正常的范围
public static void main ( String[ ] args) {
int a = 3 ;
int [ ] arr = new int [ 3 ] ;
float [ ] arr1 = new float [ 6 ] ;
arr[ 0 ] = 3 ;
arr[ 1 ] = 4 ;
arr[ 2 ] = 6 ;
System. out. println ( arr[ 0 ] ) ;
for ( int i = 0 ; i < arr. length; i++ ) {
System. out. println ( "遍历" + arr[ i] ) ;
}
int [ ] arr3 = new int [ ] { 3 , 4 , 5 } ;
int [ ] arr4 = { 4 , 5 , 6 , 8 } ;
getMax ( 3 , 4 , 6 ) ;
int [ ] arr5 = { 3 , 5 , 1 , 6 } ;
getMax ( arr5) ;
getMax ( new int [ ] { 4 , 5 , 6 } ) ;
}
public static int getMax ( int a, int b, int c) {
int max1 = a > b? a: b;
int max2 = max1 > c? max1: c;
return max2;
}
public static int getMax ( int [ ] arr) {
int temp = arr[ 0 ] ;
float a = 0 ;
for ( int i = 0 ; i < arr. length; i++ ) {
if ( arr[ i] > temp) {
temp = arr[ i] ;
}
}
return temp;
}
值传递和址传递
值传递不会改变函数外面的值 址传递可以改变函数外面的值
public static void main ( String[ ] args) {
int [ ] arr1 = { 3 , 4 } ;
exchange ( arr1[ 0 ] , arr1[ 1 ] ) ;
System. out. println ( "arr1[0]" + arr1[ 0 ] + " arr1[1]" + arr1[ 1 ] ) ;
int [ ] arr2 = { 3 , 4 } ;
exchange ( arr2) ;
System. out. println ( "arr2[0]" + arr2[ 0 ] + " arr2[1]" + arr2[ 1 ] ) ;
int [ ] arr3 = { 3 , 4 } ;
exchange1 ( arr3) ;
System. out. println ( "arr3[0]" + arr3[ 0 ] + " arr[1]" + arr3[ 1 ] ) ;
}
public static void exchange ( int a, int b) {
int temp = 0 ;
temp = a;
a = b;
b = temp;
}
public static void exchange ( int [ ] arr) {
int temp = 0 ;
temp = arr[ 1 ] ;
arr[ 1 ] = arr[ 0 ] ;
arr[ 0 ] = temp;
}
public static void exchange1 ( int [ ] arr) {
int [ ] arr1 = new int [ ] { 7 , 8 } ;
arr = arr1;
int temp = 0 ;
temp = arr[ 1 ] ;
arr[ 1 ] = arr[ 0 ] ;
arr[ 0 ] = temp;
}