1:成员变量与局部变量{
在变量声明部分声明的变量叫做成员变量;
在方法体中声明的变量叫做局部变量
}
2:实例变量与类变量
{
成员变量又分为实例变量和类变量。
在变量的类型前加static的为类变量,没有static的为实例变量
}
3:实例变量与类变量的区别{
(1)类变量是与该类创建的所有对象相关联的变量,改变其中一个对象的类变量就改变了其他对象的这个类变量,类变量可以通过某个对象进行访问,也可以直接通过类名进行访问。原因(因为类变量的值在所有对象中都是相同的,在一个对象中改变所有对象中都要改变,所以可以直接用类名进行访问)
(2)不同对象的实例变量也互不相同,改变其中一个对象的实例变量,不会对其他对象的实例变量产生影响,所以实例变量只能通过对象进行访问,不能使用类名进行访问。
}
4:实例方法与类方法的区别{
(1)类方法前会加static,而实例方法前没有static;
(2)实例方法既能对类变量进行操作,也能对实例变量进行操作,类方法只能对类变量进行操作;
(3)一个类中的方法可以相互调用,实例方法可以调用该类中的实例方法及类方法,但是类方法只能调用该类的类方法,不能调用实例方法。
(4)类方法可以通过创建的对象进行调用,也可以通过类名直接调用。但是实例方法只能通过创建对象进行调用。<此作用可以用于实例方法中变量过多,再建立对象时所占用的内存大且复杂,直接通过类名去调用比较方便快捷,且占用的内存空间少>;
(5)在类方法定义完之后,加载到内存时就已经分配了入口地址,而对于实例方法,在创建完对象之后才会分配入口地址,从而实例方法可以被类所创建的所有对象调用。附:在创建第一个对象时,类中的实例方法就分配了入口地址,之后再创建对象,不会再有另外的入口地址,即所有对象共用一个入口地址。
}
5:参数传值
{
(1)基本数据类型参数的传值
对于基本类型数据的参数,传值时,向参数传递的值的级别不能高于该参数的级别。例如:不可以向int型传递一个float类型的值,但是可以向double传递一个float类型的值;
(2)引用型数据类型的传值
当参数是引用类型时,传值传递的是变量中存放的引用,而不是所引用的实体;
}
6:可变参数
{
当参数的个数不确定时可以采用可变参数
例如:public void f(int...x)表示从第一个参数到最后一个参数数据类型都是int型
public void g (double a,int...y)表示第一个参数为double类型,从第二个到最后一个参数的类型为int型。
}
7:this关键字
{
(1)this是一个关键字表示某个对象,可以出现在实例方法和构造方法中,不可以出现在类方法中(类方法中,表示成员变量时,可以通过类名直接调用);
(2)在构造方法中使用this:当this关键字出现在类的构造方法中,代表使用该构造方法所创建的对象
public class People{
int leg,hand;
String name;
People(String s){
name=s;
this.init(); //可以省略this,即将this.init();写成init();
}
void init(){
leg=2;
hand=2;
System.out.println(name+"有"+hand+"只手"+leg+"条腿");
}
public static void main(String args[]){
People boshi=new People("布什"); //当调用构造方法People创建boshi时,其中的this就是对象boshi
}
}
(3)在实例方法中使用this代表正在调用该方法的当前对象
this.成员变量 可以操作类的成员变量。
当static类型变量出现时需要用:类名.成员变量 进行调用
(4)可以用this去调用实例方法
格式:this.方法
对于类变量,就可以通过类名直接调用
格式:类名.方法
class B{
void f(){
this.g();//也可以省略this和B写成:g();
B.h(); h();
}
void g(){
System.out.println("hello");
}static void h(){
System.out.println("你好");
}
}
}
8.包(包名的目的是有效区分名字相同的类)
{
(1)包语句
使用关键字package语句必须作为java源文件的第一条语句,源文件中最多有一条package语句
格式:package 包名;
如果源程序中省略了package语句,源文件中所定义的类就会被隐含的认为是无名包的一部分,只要这些类的字节码被放到相同的目录下,那么他们就属于同一个包,但没有包名,可以相互调用
(2)有名包类的存储目录
如果一个类有了包名则不可以随意乱放,否则java虚拟机则无法进行加载。对于有包名的类,必须按照包名对应的路径进行存储(把包名中的“.”替换成\)
例如:
package tom.jiafei;
就需要保存在。。。\tom\jiafei
例如:C:\ch2\tom\jaifei
(3)运行有包名的主类
package tom.jiafei;
public class Example4_11 {
public static void main(String args[]){
Student stu=new Student(10201);
stu.speak();
System.out.println("主类的包名也是tom.jiafei");
}
}
package tom.jiafei;
public class Student{
int number;
Student(int n){
number=n;
}
void speak(){
System.out.println("Student类的包名是tom.jiafei,我的学号:"+number);
}
}
对于这两段代码
1编译
将他们都保存在C:\ch4\tom\jiafei\中进行编译
C:\ch4>javac tom\jiafei\Student.java
C:\ch4>tom\jiafei\Example4_11.java
2运行
在命令行中必须要到他们的父目录ch4下面进行运行
C:\ch4>java tom.jiafei.Example4_11
}
9:import语句
如果一个类想要使用的那个类和他不在一个包中,那就需要import语句进行引进
{
(1)引入类库中的类
如果引入一个包中的所有类可以用*来代替,例如
import java.util.*;
(2)引入自定义包中的名
例如import tom.jiafei.*;
>1有名包的源文件
包名路径左对齐就是源文件中包名所对应的路径与import所调用的类的包名所对应的路径的父目录相同。
例如:
C:\ch4\sun\hello\com
C:ch4\sohu\com
这两个包名所对应的路径的父目录相同,都为ch4;
>2无包名的源文件
如果一个无包名的源文件想要引进非类库中的有包名的类,只需要把源文件放到想要引进的非类库中类的包所在路径的父目录下。
例如
C:\ch4\
C:\ch4\sohu\com
就是把无名包放到ch4下就可以去调用有名包的类。
>3有名包的源文件,无论如何也无法使用有名包的类
(3)使用无名包的类
如果一个无名包的类想要使用无名包的类只需要把他们放到同一个目录中即可。
}