类:它是抽象出一类事物的行为和状态。类是一个模板,用于创建具体实例(对象)的数据类型,类所声明的变量称作对象
对象:对象是类的一个实例,对象的状态就是属性,行为通过方法体现
在创建对象时,用来初识化该类中的对象
包括:
解释:内存模型:
public class Xi {//定义一个Xi类 float h; String w; void speak(String s) {//方法 System.out.println(s); } public static void main(String[] args) { Xi dx = new Xi(); } }
new 运算符在为成员变量分配内存后,将计算出一个称为引用的值(包含了这些成员变量的内存位置和相关的信息)就是指new Xi()是一个十六进制的数值
4. dx = new Xi(); 执行赋值语句,将引用给了对象dx,对象就可以操作管理这些变量
new 运算符只和类的构造方法进行计算得出一个引用,再赋值给对象,则对象就拥有了被new 运算符分配了内存的成员变量
public class Puppy{ int puppyAge; public Puppy(String name){ // 这个构造器仅有一个参数:name System.out.println("小狗的名字是 : " + name ); } public void setAge( int age ){ puppyAge = age; } public int getAge( ){ System.out.println("小狗的年龄为 : " + puppyAge ); return puppyAge; } public static void main(String[] args){ /* 创建对象 */ Puppy myPuppy = new Puppy( "tommy" ); /* 通过方法来设定age */ myPuppy.setAge( 2 ); /* 调用另一个方法获取age */ myPuppy.getAge( ); /*你也可以像下面这样访问成员变量 */ System.out.println("变量值 : " + myPuppy.puppyAge ); } //小狗的名字是 : tommy 小狗的年龄为 : 2 变量值 : 2
定义:用来表示对象是否可以通过 . 点运算符来操作自己的变量和用类中的方法
指的是:用关键字private来修饰的变量和方法
当在另一个类中创建了该类的对象后,对象不可以访问自己的私有变量和调用自己的私有方法(也不可以用类名去访问私有的类变量和私有类方法)
指的是:用关键字pulic来修饰的变量和方法
在任何一个类中创建了该类的对象后,对象都可以访问自己的共有变量和调用自己的共有方法
指的是:用关键字protected来修饰的变量和方法
当在另一个类中创建了该类的对象后,当两个类在同一个包中,对象可以访问自己的protected变量和方法
指的是:没有用关键字来修饰的变量和方法,当在另一个类中创建了该类的对象后,当两个类在同一个包中,对象可以访问自己的友好变量和方法
不可以用protected和private来修饰类
package review; public class review1 { public void m1() {} public void m2() {} public static void m3() {} public static void m4() {} public static void main(String[] args) { //m1(); //m2(); m3(); m4(); /*发现m1,m2不可以,m3,m4可以 * 分析: * 1.main方法是静态的,java虚拟机JVM调用main方法时,直接采用“类名.”,所以静态方法中没有this; * 2.m1(),m2()方法是实例方法,要通过“引用.”的方式去访问 * 3.m3(),m4()编译器会自动识别他们是静态方法,结果是“类名.m3()” * 4.若想访问m1,m2方法,必须先创建对象*/ review1 a=new review1(); a.m1(); a.m2(); } public void m5() { m1(); m2(); m3(); m4(); } /*分析: * m5()是实例方法,执行这个方法的过程中,当前对象是存在的; *检测到m1(),m2()是实例方法,会在方法前自动加上“this.” *检测到m3(),m4()是静态方法,会在方法前自动加上“类名.” *以上的前提是,方法在同一类中 * */ int a=100; static int b=20; public void m6() { int c=1; System.out.println(a);//系统自动识别为"this.a" System.out.println(b);//识别为"review1(类名).b" System.out.println(c);//局部变量访问时不需要"xxx."的,在方法体内定义的局部变量,直接访问即可 } public static void m7() { int c=1; review1 s=new review1(); System.out.println(s.a); // System.out.println(a);静态中没有this,必须先创建对象 System.out.println(b);//识别为"review1(类名).b" System.out.println(c); } /*以下是在不同类中,调用另一个类中的方法时,想调用T类中的t1()和t2()方法时, * 可以直接t1();t2();吗? * */ public static void m8() { T.t1();//在静态方法中访问另一个类中的静态方法,用类名. T a=new T(); a.t2();//在静态方法中访问另一个类中的实例方法 } public void m9() { T.t1();//在实例方法中访问另一个类中的静态方法,用类名. T a=new T(); a.t2();//在实例方法中访问另一个类中的实例方法 } } //以下是在不同类中,调用另一个类中的方法时 class T{ public static void t1() { } public void t2() { } }