Java 语言入门

340 阅读7分钟
  1. 计算机沟通的语言就是计算机编程语言(Java)

  2. 位(bit):一个数字0或者一个数字1,代表一位。

  3. 字节(Byte):每逢8位是一个字节,这是数据存储的最小单位。

  4. 1024的用二进制表示是100 0000 0000

    1 Byte = 8 bit
    1 KB = 1024 Byte
    1 MB = 1024 KB
    1 GB = 1024 MB
    1 TB = 1024 GB
    1 PB = 1024 TB
    1 EB = 1024 PB
    1 ZB = 1024 EB
    
  5. Java虚拟机,简称JVM,是Jvav程序的运行环境,我们编写的Java代码,都运行在JVM上

  6. JVM本身不具备跨平台功能,每个操作系统下都有不同版本的JVM

  7. JRE包含JVM和Java运行时所需要的核心类库

  8. JDK包含JRE和开发人员使用的工具

  9. 单引号是字符常量,双引号是字符串常量

  10. 字符串是引用类型

  11. for循环又称(计数器式循环)也就是说for循环大都是应用于明确循环次数这样的循环

  12. while循环分为do while(直到型循环) 和while(当型循环)都是不定次数循环。用在循环次数不确定的情况下

  13. IDEA快捷键

    Alt+Enter   导入包,自动修正代码
    Alt+Ins     自动生成代码,toString,get,set等方法
    
  14. 方法重载:指在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可,与修饰符和返 回值类型无关。

  15. 数组概念: 数组就是存储数据长度固定的容器,保证多个数据的数据类型要一致。

    int[] arr = new int[3];
    int[] arr = new int[]{1,2,3,4,5};
    int[] arr = {1,2,3,4,5};
    
  16. JVM 内存划分

    区域名称作用
    寄存器给CPU使用,和我们开发无关。
    本地方法栈JVM在使用操作系统功能的时候使用,和我们开发无关。
    方法区存储可以运行的class文件。
    堆内存存储对象或者数组,new来创建的,都存储在堆内存。
    方法栈方法运行时使用的内存,比如main方法运行,进入方法栈中执行。
  17. 数组作为方法参数传递,传递的参数是数组内存的地址

  18. 数组作为方法的返回值,返回的是数组的内存地址

  19. 类是对象的模板,对象是类的实体

  20. 成员变量的默认值

    数据类型默认值
    基本类型整数(byte,short,int,long)0
    浮点数(float,double)0.0
    字符(char)'\u0000'
    布尔(boolean)false
    数组,类,接口null
  21. new 出来的对象放在堆里面

  22. 成员变量和局部变量的区别

    • 在类中的位置不同
      • 成员变量:类中,方法外
      • 局部变量:方法中或者方法声明上(形式参数)
    • 作用范围不一样
      • 成员变量:类中
      • 局部变量:方法中
    • 初始化值的不同
      • 成员变量:有默认值
      • 局部变量:没有默认值。必须先定义,赋值,最后使用
    • 在内存中的位置不同
      • 成员变量:堆内存
      • 局部变量:栈内存
    • 生命周期不同
      • 成员变量:随着对象的创建而存在,随着对象的消失而消失
      • 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
  23. private是一个权限修饰符,代表最小权限,被private修饰后的成员变量和成员方法,只在本类中才能访问。

  24. this代表所在类的当前对象的引用(地址值),即对象自己的引用。

    方法被哪个对象调用,方法中的this就代表那个对象。即谁在调用,this就代表谁。

  25. JavaBean 是 Java语言编写类的一种标准规范。符合 JavaBean 的类,要求类必须是具体的和公共的,并且具有无 参数的构造方法,提供用来操作成员变量的 set 和 get 方法。

  26. API(Application Programming Interface),应用程序编程接口。Java API是一本程序员的 字典 ,是JDK中提供给 我们使用的类的说明文档。这些类将底层的代码实现封装了起来,我们不需要关心这些类是如何实现的,只需要学 习这些类如何使用即可。所以我们可以通过查询API的方式,来学习Java提供的类,并得知如何使用它们。

  27. ,表示一种指定的数据类型,叫做泛型。 E ,取自Element(元素)的首字母。在出现 E 的地方,我们使 用一种引用数据类型将其替换即可,表示我们将存储哪种引用类型的元素。

    ArrayList<String> list = new ArrayList<String>();
    
    // 在JDK 7后,右侧泛型的尖括号之内可以留空,但是<>仍然要写。简化格式:
    ArrayList<String> list = new ArrayList<>();
    
  28. 当 static 修饰成员变量时,该变量称为类变量。该类的每个对象都共享同一个类变量的值。任何对象都可以更改 该类变量的值,但也可以在不创建该类的对象的情况下对类变量进行操作。

  29. 当 static 修饰成员方法时,该方法称为类方法 。静态方法在声明中有 static ,建议使用类名来调用,而不需要 创建类的对象。调用方式非常简单。

    • 静态方法可以直接访问类变量和静态方法。
    • 静态方法不能直接访问普通成员变量或成员方法。反之,成员方法可以直接访问类变量或静态方法。
    • 静态方法中,不能使用this关键字。
  30. 子父类中出现了同名的成员变量时,在子类中需要访问父类中非私有成员变量时,需要使用 super 关键字,修饰 父类成员变量,类似于之前学过的 this 。

  31. 在每次创建子类对象时,先初始化父类空间,再创建其子类对象本身。目的在于子类对象中包含了其对应的父类空 间,便可以包含其父类的成员,如果父类成员非private修饰,则子类可以随意使用父类成员。代码体现在子类的构 造方法调用时,一定先调用父类的构造方法。

  32. 继承抽象类的子类必须重写父类所有的抽象方法。否则,该子类也必须声明为抽象类。最终,必须有子类实现该父 类的抽象方法,否则,从最初的父类到最终的子类都不能创建对象,失去意义。

  33. 接口,是Java语言中一种引用类型,是方法的集合,如果说类的内部封装了成员变量、构造方法和成员方法,那么 接口的内部主要就是封装了方法,包含抽象方法(JDK 7及以前),默认方法和静态方法(JDK 8),私有方法 (JDK 9)。

  34. 在继承体系中,一个类只能继承一个父类。而对于接口而言,一个类是可以实现多个接口的,这叫做接 口的多实现。并且,一个类能继承一个父类,同时实现多个接口。

  35. 一个接口能继承另一个或者多个接口。

    • 接口中,无法定义成员变量,但是可以定义常量,其值不可以改变,默认使用public static final修饰。
    • 接口中,没有构造方法,不能创建对象。
    • 接口中,没有静态代码块。
  36. 生活中,比如跑的动作,小猫、小狗和大象,跑起来是不一样的。再比如飞的动作,昆虫、鸟类和飞机,飞起来也 是不一样的。可见,同一行为,通过不同的事物,可以体现出来的不同的形态。多态,描述的就是这样的状态。

    多态: 是指同一行为,具有多个不同表现形式。

  37. 当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,执行的是子类重写 后方法。

    // 父类类型 变量名 = new 子类对象;
    // 变量名.方法名();
    
    Fu f = new Zi();
    f.method();
    
  38. 实际开发的过程中,父类类型作为方法形式参数,传递子类对象给方法,进行方法的调用,更能体现出多态的扩展 性与便利。所以,多态的好处,体现在,可以使程序编写的更简单,并有良好的扩展。

  39. 当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误。也就是说,不能调用子类拥 有,而父类没有的方法。编译都错误,更别说运行了。这也是多态给我们带来的一点"小麻烦"。所以,想要调用子 类特有的方法,必须做向下转型。

    // 子类类型 变量名 = (子类类型) 父类变量名;
    Cat c =(Cat) a;
    
  40. final: 不可改变。可以用于修饰类、方法和变量。

    • 类:被修饰的类,不能被继承。
    • 方法:被修饰的方法,不能被重写。
    • 变量:被修饰的变量,不能被重新赋值。

1.在Java中提供了四种访问权限,使用不同的访问权限修饰符修饰时,被修饰的内容会有不同的访问权限, - public:公共的。 - protected:受保护的 - default:默认的 - private:私有的

||public|protected|default(空的)|private|
|-|-|-|-|-|
|同一类中|√|√|√|√|
|同一包中(子类与无关类)|√|√|√||
|不同包的子类|√|√|||
|不同包中的无关类|√||||
  1. 编写代码时,如果没有特殊的考虑,建议这样使用权限:

    • 成员变量使用 private ,隐藏细节。
    • 构造方法使用 public ,方便创建对象。
    • 成员方法使用 public ,方便调用方法。
  2. 内部类可以直接访问外部类的成员,包括私有成员。

  3. 外部类要访问内部类的成员,必须要建立内部类的对象。

    // 外部类名.内部类名 对象名 = new 外部类型().new 内部类型();
    
    // 创建外部类对象
    Person p = new Person();
    // 创建内部类对象
    Heart heart = p.new Heart();
    
  4. 匿名是内部类的简化写法。它的本质是一个 带具体实现的 父类或者父接口的 匿名的 子类对象。

    public abstract class FlyAble{
        public abstract void fly();
    }
    
    public class InnerDemo {
        public static void main(String[] args) {
        /*
        1.等号右边:是匿名内部类,定义并创建该接口的子类对象
        2.等号左边:是多态赋值,接口类型引用指向子类对象
        */
        FlyAble f = new FlyAble(){
            public void fly() {
                System.out.println("我飞了~~~");
            }
        };
            //调用 fly方法,执行重写后的方法
            f.fly();
        }
    }