test t = new test("黄色");
this.color = color;
创建的对象引用是t, this就是t, 即this就是指代的类的一个实例。this的作用与python中定义成员变量所用的self类似
成员变量可以被public、protected、default、private、static、finial修饰符修饰;
局部变量可以被final修饰符修饰,但不能被public、protected、default、private、static修饰符修饰。
成员变量在堆里创建的,局部变量在栈里创建的
成员变量有系统默认值,局部变量没有系统默认值,必须手动赋值。
Byte 0
Char '\u0000'
Boolean false
Short 0
Int 0
Long 0L
Float 0F
Double 0.0D
对象引用 null
import java.util.ArrayList
ArrayList al = null; //创建一个集合类,对象引用为null值,并没有成功创建对象的具体的引用。
al.add(t.a); //任何 *** 作对象的值为null,都将出现空指针错误,即"NullPointException"。
静态引入就是可以引入包中的静态成员变量和静态方法,静态引入的构建字为static
import static 包名.aaa.*
public修饰的类表示在任何包中的任何类都能访问该类:
public class test
{
}
具有默认访问级别的类在声明时前面不加任何的修饰符,无(public/private),可以将默认的
访问级别看作包级的访问,只能被同一个包下的类使用,不能访问到不同包里的类
class test
{
}
修饰符可以修饰很多类型的数据,可以修饰成员变量、局部变量、方法以及基本类型所具有的含义。
final的含义就是一旦变量被初始化就不再允许修改。
被final修饰的成员变量,其值不能改变,且成员变量不再按照默认值进行初始化。
而对于引用类型,一旦为其赋值,将不能重新用来引用另一个对象,但可以修改其引用类型的成员变量。
成员变量使用final修饰符后,可以显式初始化或在构造方法里初始化。
使用final修饰的方法,可以被该类的子类继承,但不能在子类中重写该方法。也就是说继承以后只能原样使用。
9.静态修饰符static
静态变量只能存在一份,它属于类,不随对象的创建而建立副本.
被修饰为static的成员变量不属于对象(类的实例),它属于类,被类中的所有对象共享,在所有对象里只存在一份。
静态变量不依赖于对象的加载而依赖于类的加载,当类加载后对象可能还没有被加载,所以说静态成员变量属于类的,
其生命周期比非静态成员变量更长,在静态方法里只能使用静态成员变量。
特别注意:在静态方法里只能使用静态成员变量。在任何静态方法里都可以访问静态成员变量。
static关键字修饰成员变量,它是属于类的,随着类的创建而创建。
final关键字修饰成员变量的值是不能改变的。
static与final关键字没有先后顺序之分。
所谓静态常量就是唯一的、不可变的、只存在一份的数据。静态常量必须进行初始化。
public static final int i = 11;
public声明成员变量为公共类型,表明这个成员变量在任何包里都能访问,包括子类。
private声明成员变量为私有类型,表明除了本类外,任何类,包括其父类和其他类都不能访问这个成员变量,
具有保护该类中成员变量的作用。推荐将成员变量声明为私有类型,具有保护和可维护的作用。
default声明成员变量为默认类型(无(public/private修饰符等任何修饰符),在同一个包里的类或子类是可以访问到的,但在不同包里的类或子类,没有继承该成员变量,是访问不到它的。
protected声明成员变量为保护类型,在同一个包里和public类型是一样的,也是能够访问的,如果在不同包里protected类型的成员变量只能通过其子类来访问。
12.super超类
使用super()调用父类
super();调用父类的无参构造器
super(name,age);调用父类的两个参数的构造器。
class fruit()
{
}
class apple() extends fruit
{
}
注意:重写是基于继承的(一定出现关键字extends),没有继承就无所谓的重写,而重载就不一定基于继承(无关键字extends)
子类继承父类,子类中有和父类相同的方法名称就构成了方法的重写,关键字override,方法重写也叫做方法的覆盖。
方法的重写,返回类型为基本类型时,类型必须是相同的,否则会报错。重写就是把父类的方法继承过来,并改写其方法体。
方法如果返回类型是引用类型的内容,方法被重写后,方法返回的数据类型必须相同,如果不相同则也必须是父类的子类。
方法的重载是指在一个类中,存在两个或两个以上的具有相同名称不同参数的方法,方法重载的关键字为overload
重载的方法名称相同,但方法的参数列表不相同,如参数个数和参数类型等。
重载的方法的返回值可以相同也可以不相同。
判断方法是否为重载,看参数列表是很重要的。
public String move(){};
public String move(String name){};
public void move(String name, int spend){};
静态方法表示方法为静态的,只能有一份,是通过类调用的,static修饰的方法表示为类方法,
类方法不能通过重写进行覆盖,即使重写了调用时还是父类的方法。
static方法在类里声明具有唯一性,不是通过类的实例化而存在,而是通过类的建立而存在
static方法可以被继承,但不可以被重写。
父类的静态方法可以被子类的静态方法覆盖。
父类的非静态方法不能被子类的静态方法覆盖。
父类的静态方法不能被子类的非静态方法覆盖。
覆盖用于父类和子类之间。
重写用在同一个类中,有相同的方法名,但参数不一样。
重写的关键字是override、重载的关键字是overload.重写、重载与覆盖都是基于继承关系的。
当继承的关系发生了,想用父类的方法就用super关键字来引用,如果想用新的方法就用重写来实现新的功能需要。
对于覆盖总结如下:
覆盖的方法的参数列表比如要和被覆盖的方法的参数列表相同,才能达到覆盖的效果。
覆盖的方法的返回值必须要和被覆盖的方法的返回值一致。
覆盖的方法的抛出的异常必须要和被覆盖的方法抛出的异常一致,或者是其子类。
被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。
对重载的总结如下:
使用重载时只能定义不同的参数列表
不能通过重载的方法对返回类型、访问权限和抛出的异常来进行方法的重载。
对重写的总结如下:
重写的方法存在于父类中,也存在于子类中。
重写的方法在运行期采用多态的形式。
重写的方法不能比被重写的方法有更高的访问限制。
重写的方法不能比被重写的方法有更多的异常。
17.final与继承的关系
final关键字可以修饰成员变量,也可以修饰方法和类。
final关键字修饰类时说明其类不能有子类,也就是说该类不能被继承,父类的成员变量在子类这里不起作用。
final关键字修饰方法时,说明该方法不能被重写,因为类都不能继承了,方法就更不能被重写了。
类里可以含有final关键字修饰的方法。
final关键字修饰的成员变量的对象引用不能修改。
被final关键字修饰的类那么里面的方法都默认被修饰为final。
public final static int i=11; //成员变量被final static修饰,那么表示为常量,不能改变其值和引用。
static 和final修饰的方法是在编译器绑定的,而其它的方法是在运行期绑定的,多态的判断是什么类型。
18.抽象abstract与继承的关系
如果是抽象类的子类就必须实现抽象类的抽象方法
abstract class bike //抽象类
{
abstract public String getMes(); //被修饰为了abstract的抽象方法
}
多态也是基于继承的,可以使对象有更大的灵活性。
public enum Grade{A,B,C,D,E,F};
接口就是完成了某些特定功能的类
类不能多继承,但可以通过接口来实现多层继承。
接口既可以实现多层继承,也可以多继承。
接口不能声明为final,因为final类型的必须要实现。
接口里的成员变量默认为public static final类型,在子类中调用时不能改变其值。
在定义接口的时候,接口里的方法是没有方法体的,接口里的方法需要在其子类中实现。
接口就是一个父类,而且是一个抽象类,相应的子类要实现父类(接口)的所有方法,接口里的抽象方法没有任何方法体。
构造器与类的名称必须相同,构造器没有返回值, 也没有void类型, 有返回值就被认为是一个方法。
23.构造器方法与普通方法
构造器是为了创建一个类的对象实例,可以在创建对象的时候使用。
普通方法是为了执行相应的方法体,即java代码。
在创建一个类的时候,可以不创建构造器,编译器会自动为这个类添加一个没有参数的构造器。
父类里没有无参构造器将不能编译通过。子类里有没有无参的构造器将不重要。
子类的方法里使用super方法调用父类构造器,super()方法里写几个参数表示调用的是父类的哪个构造器。
public Son()
{
super(); //表示的是调用Father类的无参构造器
}
public Son(String name,int age)
{
super(name,age); //表示的是调用Father类的无参构造器
}
在发生继承关系时,子类的构造器方法默认调用父类的构造器方法,调用完后再调用子类的构造器方法。
被public修饰的构造器能够让所有的类访问到
被private修饰的构造器只能让本类访问的到,别的类时访问不到的。
要想别的类访到某个构造器方法,那么必须是构造器被修饰为public,构造器方法也被修饰为public。
需要知道的是修饰类和变量的用来控制这个被修饰的类和变量的适用范围的修饰词有:
1).public:表示公开的类和变量,既所有的类都可以引入使用的。
2).protected:表示受保护的类,只有子孙类和本类可以引入使用。
默认:表示同包中和本类中可以引入使用。
3).private:表示私人的,只有在本类中可以引入使用。
所以显而易见,如果一个class前面如果添加了public修饰则可以被所有类引入使用,如果没有
加任何修饰词,那么就只能够被同包中的类和本类引入使用。
在java中public void与public static void有什么区别?
public void 修饰是非静态方法,该类方法属于对象,在对象初始化(new Object())后才能被调用;public static void 修饰是静态方法,属于类,使用类名.方法名直接调用。
非静态方法之间可以互相调用,非静态方法也可以调用静态方法;但是静态方法不可以直接调用(未初始化的)非静态方法。由于 public static void main 作静态方法,所以遵循这个原则。
但是 Java 可以通过对象名调用静态方法(对象名.静态方法)。Java 中不会导致语法错误(syntax error),但是不推荐这样使用,
静态方法与非静态方法调用时应当绝对区分;而且其他 OOP 语言如 C#,Swift,Objective-C 都没有这样的语法。
class前面不添加public等任何修饰符的情况下,可以将默认访问级别看作是包级别的访问,只能被同一个包下的类使用.
27.构造器其它说明a..构造器方法是为了创建一个类的对象实例,也可以在创建对象的时候使用。
而方法是为了执行相应的方法体,即java代码。
b.在创建一个类的时候,可以不用定义一个构造器,编译器会自动为这个类添加一个没有参数的构造器。
c.自定义的构造器就是不显式的定义构造器,编译器会自动为这个类添加一个没有参数的构造器。
一旦编写了任意一个构造器,无论是否是有参构造器,系统都不再提供默认的无参构造器。
也就是说一旦编写了有参构造器,那么就一定要编写一个对应的无参构造器。否则会编译失败报错。
d. 同时为每一个类编写无参构造器是一个良好的编程习惯,要一以贯之。
e.构造器的单子模式:就是一个类在同一时刻只允许有一个对象, 是java模式工厂的一种。
单子模式就是把构造器修饰为private类型,用一个public类型的方法返回该对象的引用。
f.在局部内部类中只能访问方法或外部类中的最终变量,即变量使用final修饰,不能访问普通的局部变量。
28.主线程与多线程在一个程序中的main方法就是一个线程,它一般被称为主线程,在主线程中可以启动多个子线程来执。
29.多线程run方法在多线程的实现中 run方法是一个线程的主入口,是线程必须具有的。
30.多线程runnable接口 在多线程的实现中,实现runnable接口定义的多线程,具体如下:
首先创建一个实现runnable接口的类对象,然后将该类对象作为Thread类的参数。从而创建一个线程对象。创建的类对象可以作为多个Thread的参数构造器,这样就创建了多个线程实现。
java中调用的是start方法就启动了多线程,而执行多线程的是run方法。
同一个线程只是启动一次也就是只能调用一次start方法。
使用yield方法是线程之间交替进入运行状态,即在运行状态与准备状态之间交替执行。
使用join让步方法是可能发生中断异常的,采用无参数让步方法调用join是表示在指定的线程执行完成后再次执行其他的线程。
this.interrupted() 测试当前线程是否是中断状态,执行后将状态位清除即置为false的作用。
this.IsInterrupted() 测试线程是否已经是中断状态,但不执行清除状态位的标志。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)