一、引用类型

1、除基本类型之外 ,都称之为引用类型
2、Java的对象和数组是通过引用对其操作的。
  a、引用可以理解为一种受限的指针
  b、指针是可以进行与整数做加减运算的,两个指针之间也可以进行大小比较运算和相减运算。引用不行,只能进行赋值运算。
  c、引用就是一个变量或对象的别名,引用本质是一个对象。指针是一个段内存空间的地址,指向存储一个变量值的空间,或
  一个对象的空间。

二、JVM的栈、堆、方法区

栈:
存放:局部变量
先进后出,自下而上存储
方法执行完毕,自动释放空间。


存放new出来的对象
需要垃圾回收器来回收:System.gc()

方法区:
存放 类的信息(代码)、static变量、字符串常量等

三、类的构造方法(构造器)

构造器的方法名必须与类名一致、构造器本身是有返回值,但是不能定义返回类型(返回值的类型肯定是本类),不能在构造器里调用 return
1、类创建是无自定义的构造方法的情况下,系统提供默认的无参的构造方法。
2、自定义构造方法,方法名与类名一致,可以重载。且自定义构造方法后,系统不再提供 默认的无参构造方法,只能手动添加无参的构造方法。
3、this关键字是对一个对象的默认引用,用以区分同名局部变量。
4、构造方法不能有返回值类型,如定义了与类名一样的方法带有返回类型,那么这个方法就不是构造方法,也就不能用于new 对象。
public class Penguin {
String name = null;
int health = 0;
String gender = null;
public void Penguin(){
health = 10;
gender = "雄";
System.out.println("执行构造方法");
}

public void Penguin(String name, int health){
this.name = name;
this.health = health;
System.out.println("执行带参的构造方法");
}

public void print(){
System.out.println("......");
}

public static void main(String[] args) {
Penguin penguin = new Penguin();
penguin.print();
Penguin gg = new Penguin("红企鹅", 1);//此处会报错
}
}

 

四、this关键字

1、this的作用
  a、this表示的是当前对象本身。更准确地说,this代表当前对象的一个引用

2、普通方法中使用this
  a、区分类成员属性与类方法的形参。
  b、调用当前对象的其他方法(可以省略)
  c、位置:任意

3、构造方法中使用this
  a、使用this来调用 其它构造方法
  b、位置:必须是第一条语句

4、this不能用于static方法。this代表的是对象,即需要先new出对象。static是类的方法,在new出对象前可以调用,所以不可以。
public Penguin(){
health = 10;
gender = "雄";
System.out.println("执行构造方法");
}
public Penguin(String name){
this.name = name;
}

public Penguin(String name, int health){
this(name);//this调用一个参数的构造方法
this.health = health;
System.out.println("执行带参的构造方法");
}

五、static关键字

1、不需要对象,就可以调用。(类名.方法名)
2、在调用static的方法时,不会将对象的引用传递给它,所以在static方法中不可访问非static成员
3、静态方法不能以任何方式引用this和super关键字。
4、在方法里不可以定义static变量。

Static示例代码

public class TestStatic {
int a;
static int width;
static void gg(){
System.out.println("gg");
}
void tt(){
System.out.println("tt");
}
public static void main(String[] args){
TestStatic hi = new TestStatic();
TestStatic.width = 2;
TestStatic.gg(); //gg();
hi.gg(); //通过引用也可以访问static变量或static方法。不过,一般还是使用类名.static成员名来访问。
gg();
}
}


//使用static统计在类中一共产生多少个对象
public class StaticDemo{
static int count;
public StaticDemo(){
count ++;
System.out.println("...")
}
}

六、代码块

1、普通代码块:普通方法里代码块
2、构造代码块:直接写在类中的代码块。每次创建对象的时候会执行。
3、静态代码块:在类中使用static声明的代码块,类第一次被载入时,先执行static代码块;类多次new对象时,类多次载入时,static代码块只执行
  一次。经常用来进行static变更的初始化。
  注意:是在类初始化时执行,不是在创建对象时执行。
  静态初始化块中不能访问非static成员。
  不能放在static方法里。
4、同步代码块:多线程
public class CodeDemo {
static {
System.out.println("static 代码块");
}
{
System.out.println("构造代码块001");
}
{
System.out.println("构造代码块002");
}
public CodeDemo(){
System.out.println("构造方法");
}
public void print(){
{
System.out.println("方法中的代码块");
}
}
public static void fn(){
static {//报错

}
}

public static void main(String[] args) {
CodeDemo code1 = new CodeDemo();
CodeDemo codeDemo = new CodeDemo();
}
}

 

七、JDK中的主要包

java.lang:
包含一些java语言的核心类,如String、Math Integer System Thread,提供常用功能。

java.awt
包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形
用户界面(GUI)

java.net
包含执行与网络相关的操作的类.

java.io
包含能提供多种输入/输出功能的类。

java.util
包含一些实用工具类,如定义系统特性、使用与日期日历相关的函数。

八、import

import static:用于导入指定类的静态属性。
import static java.lang.Math.*;//导入Math类的所有静态属性。
import static java.lang.Math.PI;//导入Math类的PI属性。
如上导入后,在程序中直接使用:System.out.println(PI)

 

九、面向对象的三大特征

1、继承 inheritance
  子类可以从父类继承属性和方法。
  子类可以提供自己单独的属性和方法
2、封装/隐藏encapsulation
3、多态

十、使用访问控制符,实现封装

1、成员变更或方法的访问权限共四种:
  public:公共的,可以被项目中所有的类访问。即项目可见性
  protected:受保护的。可以被这个类本身访问;同一个包中的所有其他的类访问;被它的子类(同一个包以及不同包中的子类)访问
  default/friendly默认的/友好的。被这个类本身访问;被同一个包中的类访问
  private:私有的。类可见性。只能被这个类本身访问。

2、类的访问权限只有两种
  public:公共的。可被同一项目中所有的类访问。(必须与文件名同名)
  default/friendly默认的/友好的。可被同一个包中的类访问。

 

 

十一、继承

1、子类只能继承一个父类。即只有单继承,没有实现多继承,多继承可以通过接口来实现。
2、super关键字
  a、super是直接父类对象的引用。
  b、可以通过super来访问父类中被子类覆盖的方法或属性。
  c、super只能出现在子类的方法和构造方法中。
  d、super调用构造方法时,只能放在第一句。
  e、super和this不能同时出现在构造方法中。
  f、super不能访问父类 的private成员。
  g、super和this都不能在static方法中。
3、调用的顺序
  普通方法中:任意
  构造方法中:类的构造函数中,若没有显式地调用 super(); java会默认加上super()。
  如果显式需要放在第一行。
4、继承权限
 以下三种情况的父类成员不能被子类继承:
  a、不能直接访问private成员
  b、子类与父类不在同包,使用默认访问权限的成员。
  c、构造方法

5、方法的重写(override)
  a、在子类中可以根据需要对从父类中继承的方法进行重写。
  b、重写方法必须和被重写方法具有相同方法名、参数列表、返回类型。
  c、重写方法不能使用比被重写方法更严格的访问权限。

十二、抽象类、抽象方法

抽象类:不能被实例化
抽象方法:没有方法体。
抽象方法必须在抽象类里。
抽象方法必须在子类中被实现,除非子类是抽象类

十三、final

1、不希望类被继承,定义为final类。public final class Penguin extends Pet{}
2、不希望方法被重写,定义方法为final。public final void print(){}
3、属性值不希望被修改,使用final定义为常量。final String

十四、方法参数的值是否改变

方法中的参数列表叫做形式参数,没有具体的值,只是为了方便在方法体中使用
调用方法的时候实际传入的值叫实际参数,代表具体的数值,用来替换在方法体中代码逻辑的值进行运算

 

十五、多态

对应同一个指令(调用同一个名称的方法),不同的对象给予不同的反应(不同的方法实现)。
规范(多态实现的前提):
1、必须要有继承关系。
2、子类方法必须重写父类的方法。
3、父类引用指向子类对象。

posted on 2020-08-22 18:57  风语者未来  阅读(90)  评论(0)    收藏  举报