一、今日学习
1.方法参数及其传递问题
(1)Java方法的参数传递只有值传递,并且传入的参数是基本类型或引用类型。
(2)传入的是基本类型——基本类型会在栈中分配内存,在方法内修改参数值时不影响原实参
(3)引用类型传递——在栈中声明,在堆中分配内存
-
例:P p=new p();
-
若对象没有初始化,则会报空指针异常
-
每个对象都是由new创建,互不影响,每个对象中实际保存的只是属性
-
栈内存保存的是对堆内存的引用地址;堆内存保存的是每一个对象所拥有的属性;全局代码区保存的是所有类中的方法,公共调用
-
一块堆内存可以同时被多个对象同时指向
2.方法递归
条件:
-
必须满足一个结束的条件
-
方法调用自身
1 public class Study{ 2 public static void main(String[] args) { 3 Study j=new Study(); 4 long i=j.f(5); 5 System.out.println(i); 6 } 7 public long f(int n) { 8 if(n==1) { //满足结束条件 9 return 1; 10 } 11 return n*f(n-1); //调用自身 12 } 13 }
3.类的属性
3.1 属性
(1)成员属性(全局变量)
-
定义在类中、方法的外面,它的范围归整个类共享
1 public class 类名{ 2 类型 属性名称; 3 }
-
可以通过“对象.属性”来访问
-
全局变量的默认值:整型——0 浮点型——0.0 布尔类型——false 引用类型——null
-
通常对属性进行封装,使用getXXX得到属性值,使用setXXX来设置属性
(2)局部变量
定义在方法内部,作用范围到方法尾结束
3.2 this关键字
(1)this指的是当前对象,可以通过this关键字访问类中的属性、方法
(2)this()是指调用本类中的无参数构造器,this(参数)是指调用本类中的有参构造器
使用this调用构造器时,this关键字必须放在构造器第一行,否则报错
1 public class ThisDemo{ 2 int x; 3 public ThisDemo() { 4 System.out.println("无参构造函数"); 5 } 6 public ThisDemo(int x) { 7 this(); 8 this.x=x; 9 } 10 public ThisDemo(int x,int y) { 11 this(x); 12 y=20; 13 } 14 }
3.3 变量的作用域和生存期
-
全局变量的作用域从变量定义开始,一直到类结束,范围包括整个类
-
局部变量是定义在方法内部的,作用域从定义开始,到方法尾结束
4.Java中的包
(1) 包的作用:为类分类
(2) 包的定义:package 包名; //定义包名必须在程序的第一行
(3) 包名:最好采用公司域名的倒写形式命名包 例:package com.apple
(4) 用包导入类型
要想调用不在同一个包的类中的方法和属性,需要导入包中的类
-
导入包中所有的类:import 包名.*;
-
导入包中具体的类:import 包名.类名;
(5)编译包
- 命令行的方式编译:
编译程序:javac -d . 类名.java 或者 javac 包路径/类名.java //-d——创建目录 “.”是当前目录
//当前路径下有com文件夹,接着是wuzy文件夹,entity文件夹,类文件
运行包中的程序:java 包路径/类名
- 用MyEclipse编译和运行
(6)包名:建议全部小写
二、遇到问题
方法的参数传递可以是值传递或引用传递,而Java传递只有值传递;
this指针指向属性或普通方法是this.属性/方法,指向构造器是this(参数)
三、明日学习
1.学习Java中的枚举以及第四章的综合实例
2.完成第四章练习