获取数组中的数据:数组名 [索引]
获取并赋值数组中的数据:int 名称 = 数组名 [索引];
索引是从左至右,从0~... , 有几个元素,就有几个索引,最大索引是数组的长度减一;
数组的遍历:
数组遍历就是将数组中的所有内容取出来,取出来之后可以(打印,求和,判断...)
遍历是指取出数据的过程,不要局限的理解为,遍历就是打印
Java中,关于数组的一个长度属性用.length表示,调用方式为:数组名.length
一个循环尽量只做一件事情
数组动态初始化:初始化时只指定数组长度,由系统为数组分配初始量
格式:数据类型 [ ] 数组名 = new 数据类型 [ 数组长度 ];
范例:int [ ] arr = new int [ 3 ] ;
数组默认初始化值的规律:
整数类型:默认初始化值0
小数类型:默认初始化值0.0
字符类型:默认初始化值'\u0000',表示为空格
布尔类型:默认初始化值 false
引用数据类型:默认初始化值 null
动态初始化数组数值赋值:数组名 [ 索引 ] = 数值;
打乱数据:int randomIndex = r.nextInt (arr.length);
int temp = arr [ i ] ;
arr [ i ] = arr [ randomIndex ] ;
arr [ randomIndex ] = temp ;
二维数组:
二维数组的声明方式与一维数组类似,内存的分配也一样是用new运算符。
其声明与分配内存的格式如下所示:
数据类型[][]数组名; 数组名=new数据类型[行数][列数];
范例:
int[][]a; //声明二维整型数组a
a=new int[3][4]; //分配一块内存空间,供3行4列的整型数组a使用
Java的内存分配:
栈 方法运行时使用的内存,比如main方法运行,进入方法栈中执行
堆 存储对象或者数组,new来创建的,都存储在堆内存
方法区 存储可以运行的class文件
本地方法栈 JVM在使用操作系统的时候使用,和我们开发无关
寄存器 给CPU使用,和我们开发无关
注意: sout(arr[])是可以打印数组的
Sting s="hello";堆内存只有strings,值在方法区常量池,因为string是引用类型但是没有new
只要是new一定开辟了空间
栈是方法执行区,堆是存储与new相关的一大片空间,如果new了多次,堆里面就会有不同的各自独立的小空间。
从内存的角度去解释:
基本数据类型:数据值是存储在自己的空间中 特点:赋值给其他变量,也是赋的真实的值
引用数据类型:数据值是存储在其他空间中,自己空间中存储的是地址值 特点:赋值给其他变量,赋的是地址值
传递基本数据类型时,传递的是真实的数据,形参的改变,不影响实际参数的值
传递引用数据类型时,传递的是地址值,形参的改变,影响实际参数的值
方法是程序最小的执行单元
工程-模块-包-类-方法-语句
方法(C中的函数)就是封装了一段可重复调用的代码块,作用可以重复使用代码
C语言中的函数可以返回任何类型的值,而Java中的方法必须返回一个值或void。 C语言中的函数可以有任意数量的参数,而Java中的方法必须有一个或多个参数。
方法必须先定义再调用,看到方法进入方法,执行完毕回到调用处
方法的定义:
public static void 方法名 () { 方法体 (就是打包起来的代码) ;}
方法的调用:
public static void main (String [] args)
{
方法名 () ;
}
形参:形式参数,即方法定义中的参数。
实参:实际参数,即方法调用中的参数。
定义时变量定义在小括号里面,不赋值,调用时要在调用方法名后的小括号里赋值,数量与类型都要对应
范例:public static void main (String [] args)
{
getSum ( 10 ,20 );
}
public static void getSum (int num1 ,int num2 )
{
int result = num1 + num2 ;
System.out.println(result);
}
为了在调用处拿到方法的结果
返回得到一个计算结果,可以输出计算结果
不返回,主函数没办法用调用函数里的结果
返回格式:
public static 返回值数据类型 方法名 (参数)
{
方法体;
return 返回值;
}
void表示返回空,即什么都不返回
return表示将后面结果返回到方法调用处,和循环无关,和方法有关,表示结束方法并返回结果,如果方法执行到了return,则整个方法结束,里面的循环也会随之结束了
break和方法无关,表示结束循环或者switch的
方法的重载:方法的重载是指在不同的参数(参数类型或数量)的情况下实现同样的功能可以用同一个方法名调用实现
同一个类,方法名一样,形参不一样
面向对象编程:拿东西过来做对应的事情
学习获取已有对象并使用
学习如何自己设计对象并使用:面向对象的语法
面向对象的三大特征:封装 继承 多态
封装:作用是告诉我们如何正确设计对象的属性和方法 对象代表什么,就得封装对应的数据,并提供数据对应的行为
类和对象
类(设计图):是对象共同特征的描述;
对象:是真实存在的具体东西(根据设计图造出来的东西)
Java中,必须先设计类,才能获取对象
用来描述一类事物的类,专业叫做: Javabean类. 在Javabean类中,是不写main方法的.
在以前,编写main方法的类,叫做测试类. 我们可以在测试类中创建Javabean类的对象并进行赋值调用.
如何定义一个类:
public class 类名
{
1. 成员变量 (代表属性,一般是名词)
2. 成员方法 (代表行为, 一般是动词)
3. 构造器
4. 代码块
5. 内部类
}
范例:
public class Phone
{
//属性 (成员变量)
String brand;
double price;
//行为(方法)
public void call ()
{
System.out.println("手机在打电话");
}
public void playGame()
{
System.out.println("手机在玩游戏");
}
}
创建对象用new创建
如何创建类的对象:
类名 对象名 = new 类名 (); 中的()中的内容是用来调用构造方法的,为空则调用空参构造
范例: phone p = new phone();
public class PhoneTest
{
public static void main (String [] args)
{
Phone p = new Phone ();
}
}
如何使用对象:
访问属性: 对象名.成员变量
访问行为: 对象名.方法名(...)
public class PhoneTest
{
public static void main (String [] args)
{
//创建对象
Phone p = new Phone ();
//叫做给手机赋值
p.brang = "小米" ;
p.price = 1999.98 ;
//获取手机对象中的值
System.out.println(p.brand);
System.out.println(p.price);
//调用手机中的方法即可
p.call();
p.playGame();
}
}
类名首字母建议大写,需要见名知意,驼峰模式.
一个Java文件中可以定义多个class类,但只能有一个类是public修饰,并且public修饰的类名必须成为代码文件名. 实际开发中建议还是一个文件定义一个class类.
成员变量的完整定义格式是:修饰符 数据类型 变量名称 = 初始化值 ; 一般无需指定初始化值,存在默认值.
权限修饰符:
不加修饰符不是public,是允许本类和同包类访问
public 公共访问控制符,可以被任何对象或任何对象的方法访问
private 私有访问控制符,可以修饰成员(成员变量和成员方法),指定该变量只允许自己类的方法访问其他任何类(包括子类)中方法均不能访问此变量
set方法: 给成员变量赋值;
范例:
public void setName (String name)
{
this.name = name ;
}
get方法: 对外提供成员变量的值;
范例:
public String getName ()
{
return name ;
}
就近原则
因为是在方法中定义,在方法中调用就近原则
定义在方法里面的是局部变量
this.就是使用成员变量,可以区分成员变量和局部变量
this的本质: 所在方法调用者的地址值
setName将数值给形参,再由this传给实参
构造方法---创建对象中的一步
概述: 也叫作构造器,构造函数
作用: 在创建对象的时候给成员变量进行初始化的,是用来实例化对象方便赋值的
构造方法的格式:
public class Student
{
//构造方法
修饰符 类名 (参数)
{
方法体;
}
}
特点:
1. 方法名与类名相同,大小写也要一致;
2. 没有返回类型,连void都没有;
3. 没有具体的返回值 (不能由return带回结果数据)
细节(执行时机):
1. 创建对象的时候由虚拟机调用,不能手动调用构造方法
2. 每创建一次对象,就会调用一次构造方法
范例:
public class Student
{
private String name;
private int age;
public Student()
{
... //空参构造方法
}
public Student (String name ,int age)
{
... //带全部参数构造方法
}
}
注意:
构造方法的定义: 如果没有定义构造方法,系统将会给出一个默认的无参数构造方法 ; 如果定义了构造方法,系统将不再提供默认的构造方法
构造方法的重载: 带参构造方法,无参数构造方法,两者方法名相同,但参数不同,这叫做构造方法的重载
推荐使用方法: 无论是否适用,都手动书写无参数的构造方法,和带全部参数的构造方法
构造方法概述: 创建对象的时候,虚拟机会自动调用构造方法,作用是给成员变量进行初始化的