- 全局变量有默认值(new对象中会有初值0),局部变量没有默认值
- 全局变量只能声明和创建语句,不能有赋值语句。局部变量可以有赋值语句
public class demo{ public static void main(String[] args) { int x; x = 1; //在main方法中是正确的,出了main方法就错了 int y = 1; } }
- 构造方法没有类型,必须要以类的名字来命名。如果没有声明,就默认声明一个没有参数没有语句体的构造方法。
- 类中可以有多个构造方法,但是参数必须要不同,此时在创建对象的时候可以选用不同的构造方法
- 用new声明的对象叫做对象的一个引用,分配给对象的变量叫做对象的实体
//new a = Zimu() //(a是引用) (Zimu是一个实体)
- 引用类型的参数传值:当一个类声明的两个对象有相同的引用(对象名相同),那么二者就有完全相同的变量,指向相同的实体。当一个对象操作其引用的变量发生改变,另一个也会改变。除非重新创建一个新的引用,则原引用不会受影响。(P70例7)
- 对象的组合:原理和6差不多
- this.成员变量:用该方法赋值后,说明该类中其他的该成员变量也都是这个值(因此this不可以出现在类方法中!,同时还有个原因是因为类方法可以通过类名直接调用,此时任何对象可能还没有创建)
class Tom{ private int x = 120; protected int y = 20; int z = 11; void showX(){ System.out.println(x); } public void setX(int x){ this.x = x; System.out.println(x); } } public class E { public static void main(String arg[]) { Tom tom = new Tom(); Tom jiafei = new Tom(); tom.setX(22); //22 tom.showX(); //22 jiafei.showX(); //120 } }
-
访问权限:
成员变量成员方法构造方法可以是上面的任何一个访问权限。不可以用protected和private修饰类。
-
继承:子类可以调用父类的非private方法。
-
类变量:当用new创建多个对象的时候,若改变其中一个对象的这个类变量的值,其他对象的该类变量值都会改变。 类方法:类方法不可以操作实例变量,因为在类创建对象之前,实例成员变量还没有分配对象。方法中声明的局部变量不可以用static修饰。
-
方法重载:一个类中可以有多个名字相同的方法,但是参数必须不同(参数个数或参数类型不同)
-
构造方法可以被重载,static方法也可以被重载。不可以用static修饰构造方法(类方法被加载到相应的内存后就有了相应的地址,而实例方法只有用构造方法声明后才有相应地址。二者作用矛盾)!static方法可以进行重写操作,但是重写后,子类对象的上转型对象不能调用子类的static方法,而只能调用父类的static方法。
class Animal{ public static int get(int n){ return n+10; } public int see(int n){ return n+10; } } class Dog extends Animal { public static int get(int n){ return n*10; } public int see(int n){ return n*10; } } public class lei { public static void main(String args[]){ Animal animal = null; Dog dog = new Dog(); animal = new Dog(); System.out.printf("%d,%d,%d",animal.get(10),dog.get(10),animal.see(10)); //20,100,100 } }
-
方法重写:子类的方法和父类方法类型 名字 参数完全相同。这时父类的方法会被隐藏(变量的隐藏:自类变量和父类变量名字相同)。这时子类就不可以调用父类被隐藏的方法和变量,除非用super()。
-
**关于子类操作的变量:子类继承的方法 :只可操作子类继承和隐藏的成员变量。 子类新定义的方法: 可操作子类继承和子类新声明的成员变量,不可操作被隐藏的成员变量和方法(除非super()) 子类重写的方法 :同新定义的。
-
如果想在子类中使用被子类隐藏的成员变量或方法,就要用super.x或super.play()。super调用父类的构造方法:子类是不继承父类的构造方法的。必须要用super()来调用,且参数要与父类的参数设置一致,且必须是子类构造方法中第一句。只是,当父类构造方法为默认的时,子类构造方法通常默认有super(),因此不必写。但是当父类的构造方法定义了一个或多个构造方法是,要想子类不写super,就必须要规定一个无参数的构造方法。子类构造方法中不可以有多条super调用父类的某个构造方法的语句!super关键字形成的语句必须是子类构造方法中的第1条语句(×) 子类可以用super关键字调用父类的父类中的方法(×)
-
final关键字:类不可以被继承 不可以修饰构造方法 不可以被子类重写 他可以认为是一个常量,但是没有默认值,必须要指定该常量。不允许用final和abstrat同时修饰一个方法或类。final方法可以是static方法。
-
对象的上转型对象(可参考P127例子10):简而言之就是父类用子类的方法。但是对象的上转型对象只可以操作两个:1.隐藏或继承的变量(原属于父类) 2.继承或重写的对象(是子类的,表现出多态)
class 类人猿{ int m = 10 void cryspeak (String s){ System.out.println(s); } } class People extends 类人猿{ int m = 100; void cryspeak (String s){ System.out.println(s); } } public class E{ public static void main(String arg[]){ 类人猿 monkey; //或 类人猿 monkey = null; People geng = new People(); monkey = geng; //monkey 是People对象geng的上转型对象 //还可直接:类人猿 monkey = new People(); monkey.cryspeak("啊啊啊");//等价于geng.cryspeak("啊啊啊"); monkey.m //输出是10
-
abstract方法 只允许声明,不允许实现,因此不可以用new创建该类的对象。没有方法体。不可以用static修饰abstract方法(即abstract方法必须是实例方法)。abstract类中可以有abstract方法,也可以有非abstract方法。非abstract类中不可以有abstract方法。 如果一个abstract类的子类为非abstarct类,那么它必须重写父类的方法。
-
方法局部变量的命名和方法的形参不能相同。 当成员变量命名与方法的形参或局部变量一样时,即使形参或局部变量的赋值与成员变量不同,成员变量也不会变(Java的就近原则),除非有this声明。
public class Mainceshi { private String a = "成员变量"; public void GetA() { String a = "局部变量"; System.out.println(this.a); System.out.println(a); } public static void main(String[] args) { Mainceshi mainceshi = new Mainceshi(); mainceshi.GetA(); //成员变量 局部变量 } }
Java笔记之 类
于 2022-03-10 21:48:34 首次发布