数组动态初始化
格式 arrayName=new type[length];
实例:int arr[]=new int[3]
arr[0]=1; arr[2]=6; 结果:1 0 6
数组内存分析
主要分为栈区和堆区 栈区主要存放引用地址 堆区主要存放大块的实际数据,比如对象,数组;
我们可以把栈区理解成电视遥控器,堆区就是电视机,我们的遥控器操作电视机总比直接操作电视机方便,所以这就是栈区的意义;栈区里的引用地址指向堆区的具体数据。
二维数组静态初始化
格式 arrayName=new type[][]{{element1,element2},{element1,element2},{element1,element2}};
实例: int[][]arr=new int[][]{{1,2,3},{4,5,6},{7,8,9}}; //一个中括号一行
二维数组动态初始化 格式: arrayName=new type[length][length];
实例: int[][]arr2=new int[3][3]; arr2[1][2]=3;
public class HelloWorld {
public static void main(String[] args) {
int arr[][]=new int[][]{{1,2,3},{4,5,6},{7,8,9}};
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr[i].length;j++){
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
}
}
结果:
1 2 3
4 5 6
7 8 9
数组排列实例——起泡法
对4,21,0,-12,-3排序升序
public class HelloWorld {
public static void main(String[] args) {
int arr[]={4,21,0,-12,-3};
int temp;
//循环次数n-1次
for(int i=0;i<arr.length;i++){
//比较次数n-1-i
for(int j=0;j<arr.length-1-i;j++){
//假如前面的一个数大于后面一个数,则交换数据
if(arr[j]>arr[j+1]){
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
for(int a:arr){
System.out.print(a+" ");
}
}
}
Java 面向对象
三大特性:封装;继承;多态
类中可以放属性和方法
简单的对象和调用方法
public class Person {
String name;//在类中定义一个姓名name字符串属性,可以存放字符串zhangsan
int age; //在类中,定义一个年龄age属性
public void speak(){
System.out.println("我叫"+name+" 我今年"+age);
}
public static void main(String[] args) {
//定义一个Person类的对象zhangsan
Person zhangsan;
//实例化对象
zhangsan=new Person(); //Person zhangsan=new Person();
zhangsan.name="张三";//给对象的name属性赋值
zhangsan.age=11;//给对象的age赋值
zhangsan.speak();//调用对象的方法
}
}
运行结果:我叫张三 我今年11方法
参数之间用 ,隔开,普通方法必须先new一个对象,有了对象才能调用方法
public class Person {
String name;
int age;
public void speak(String name,int age){
System.out.println("我叫"+name+" 我今年"+age);
}
public static void main(String[] args) {
Person zhangsan=new Person();
zhangsan.speak("张三",23);//调用对象的方法
}
}
不固定参数
public class Person {
String name;
int age;
public void speak(String name,int age,String...hobbies){
System.out.println("我叫"+name+" 我今年"+age);
for(String hobby:hobbies){
System.out.print(hobby+" ");
}
}
public static void main(String[] args) {
Person zhangsan=new Person();
zhangsan.speak("张三",23,"游泳","唱歌");//调用对象的方法
}
}
运行结果:
我叫张三 我今年23
游泳 唱歌直传递
public class Person {
void speak(int age){
System.out.println("我今年"+age);
age=24; //方法里是24
}
public static void main(String[] args) {
Person zhangsan=new Person();
int age=11;
zhangsan.speak(age);
}
}
运行结果:
我今年11
引用传递
class SanWei{
int b;
int w;
int h;
}
public class Person {void speak(int age,SanWei sanWei ){
System.out.println("我今年"+age);
System.out.println("我的三围是:"+sanWei.b+","+sanWei.w+","+sanWei.h);
age=24;
System.out.println("方法里age"+age);
sanWei.b=80;//胸围缩水
}
public static void main(String[] args) {Person zhangsan=new Person(); int age=11; SanWei sanWei=new SanWei(); sanWei.b=90; sanWei.w=60; sanWei.h=90; zhangsan.speak(age,sanWei); System.out.println(age); System.out.println("调用地方,胸围"+sanWei.b);//和直传递有区别,传的是地址
}
}
运行结果:
我今年11
我的三围是:90,60,90
方法里age24
11
调用地方,胸围80方法的重载,方法名字一样,但参数个数不一样
long add(int a,int b){return a+b;}和int add(int a,int b){return a+b;}不算重载,也会错误。参数类型个数一样,返回值类型不一样 不算重载,直接会报错,说方法重名。静态方法 是加了static修饰词的方法,我们使用的时候 一般用类名.方法 方式调用;
当然也可以用对象.方法 调用; 一般java里的工具类里的工具方法 用static修饰,作为静态方法;
public class Demo02 {
void fun1(){
System.out.println("这是一个普通方法");
}
static void fun2(){
System.out.println("这是一个静态方法");
}
public static void main(String[] args) {
Demo02 demo=new Demo02();
// 调用普通方法 对象.方法
demo.fun1();
// 调用静态方法 类名.方法
Demo02.fun2();
demo.fun2();
}
}递归的话 我们首先要找到规律 还有必须有一个出口;
Java面向对象-构造方法,this关键字
构造方法是一个特殊的方法,这个特殊方法用于创建实例时执行初始化操作;
People(){} 构造方法
特点 1,没有返回值类型,区别于其他一般方法;
2,方法名和类名一样;