Java笔记

2024-05-30 20:01:35 浏览数 (1)

Java 基础

易错知识点

  1. 等号=用于比较两个变量的引用(即内存地址)是否相同,而equals用于比较两个变量的内容(即内存地址里存放的值)是否相等
  2. 构造类中方法时要进行空参构造和全参构造
  3. private只能在本类的方法中使用而protected可以再本类和子类的方法中使用
  4. Object是所有类的父类,是顶级父类所有类都继承它
  5. 创建对象调用方法时不能为null,否则会报错(空指针异常)
  6. 基本数据类型byte(1字节)short(2字节)int(4字节)long(8字节)
  7. 12315613616L(L表示long类型)
  8. int是基本数据类型,integer是引用数据类型,integer是一个int的对象可以进行toString()操作

java 入门

代码语言:javascript复制
 public class Test{
     public static void main(String[] args){
         //nextInt() nextDouble() 
         //next()接受字符串,遇到空格制表符回车才停止接受数据 
         
         //nextLine()接受字符串 可以接受空格制表符,回车结束
         //以上两种录入方法是不能混用的
         import java.util.Scanner;
         Scanner sc =new Scanner(System.in)
         System.out.println("你认识小红");//换行输出 line next
  System.out.print()
         System.out.print()//一行输出
        
     }
     //调用类时用 Car[] c=new Car();
     System.out.println("你没认识小红" gf.getName() "aksjflka");
     //字符串对比用str1.equals(str2)
     //String类型内容不可改变"abc"-->{'a','b','c'}-->"Qbc"
     byte[] bytes={97,98,99,100};//byte-->(ascii)
     //byte类型一般在网络传输中使用,传输字节信息--->io流
     String s=new String(btyes);
     System.out.println(s);--->abcd
 }
 非静态从属于对象,需要区分对象,静态方法从属于类,不需要区分对象
 因为this它的作用就是指向调用者的地址值啊,static全是共享的,就不必要用this了
     静态方法不能调用非静态成员变量(对象)
     a(父类) instanceof Dog(子类) d(a是不是Dog类型的,如果是强转成Dog类型并命名为d,不是则false)
     
     data.fori ===> for(int i=0;i<data;i  ){}

static修饰的方法或变量是在创建新类之前就创建了不能用实例调用static,直接用类名调用,只要是静态的东西,都可以类名点直接获取

创建静态内部对象的格式: 外部类名.内部类名 对象名 =new 外部类名.内部类名()

编译能否成功看左边 编译结果要看右边

调用静态方法的格式: 外部类名.内部类名.方法名()

final相当于cpp的const final修饰方法表明此方法不能重写 修饰类不能被继承 修饰变量则只能赋值一次

面向对象

可变参数

  1. 方法形参中最多只能写一个可变参数
  2. 如果方法中除了可变参数以外还有其他形参,可变参数要写在最后
  3. 可变参数本质上是一个数组 public static int getSum(int...args) { int sum = 0; for (int j : args) { sum = j; } return sum; }

内部类和外部类

Java 内部类(嵌套类)与外部类之间的关系和特性如下: 定义: 外部类:正常的类,可以独立存在,不包含在其他类的定义内。 内部类(嵌套类):定义在另一个类(外部类)内部的类,它可以访问外部类的所有成员,包括私有成员。 类型: 成员内部类:类似于外部类的成员,可以在类的方法之外定义,可以是 public, protected, private 或默认访问修饰符。 局部内部类:定义在方法、构造器或块内的类,作用域仅限于该方法或构造器。 匿名内部类:没有名称的内部类,通常用于简洁地实现接口或抽象类的一个实例。 静态内部类(嵌套类):用 static 关键字声明,不直接与外部类的实例关联,可以像普通类一样创建对象。 访问权限: 内部类可以直接访问外部类的所有成员,包括私有成员和静态成员。 外部类要访问内部类的成员,必须先创建内部类的实例。 生命周期: 内部类的生命周期与外部类相关联,不能在没有外部类实例的情况下创建内部类的实例(静态内部类除外)。 对于非静态内部类,每个内部类对象都隐含地持有一个外部类的引用,可能导致外部类对象无法被垃圾回收。 使用场景: 内部类常用于封装特定于外部类的逻辑,提供更好的封装性和信息隐藏。 静态内部类常用于创建与外部类紧密相关的辅助类,但不需要外部类的实例。 编译结果: 编译后的 .class 文件,内部类会被编译成单独的文件,名称为外部类名加 内部类名,例如 OuterInner.class。 内存模型: 内部类对象存在于外部类对象的堆内存中,而局部内部类对象存在于方法栈帧中。 这些特性使得内部类成为 Java 中一种强大的工具,尤其是在设计模式和复杂逻辑处理中。

JavaBean(右键pte)

代码语言:javascript复制
 class GirlFriend{
             private String name;
             private int age;
             private String sex;
             public GirlFriend(String name,int age,String sex){
                 this.name = name;
                 this.age = age;
                 this.sex = sex;
             };
             public void setName(String name){
                 this.name = name;
             }
             public String getName(){
                 return name;
             }
             public void setAge(int age){
                 this.age = age;
             }
             public int getAge(){
                 return age;
             }
             public void setSex(String sex){
                 this.sex = sex;
             }
             public String getSex(){
                 return sex;
             }
         }

重载

指在一个类中有多个同名方法(参数列表不同) @override方法重写(只有添加到虚方法表的方法才能被重写,重写时子类权限必须大于父类) this就近原则子类没有找父类

封装

将对象的数据(属性)与数据的操作(方法)绑定在一起

继承

子类继承父类的公有方法和变量 继承:虚方法表(非final static private) super 调用父类

接口(继承的一种)

接口是方法的抽象interface implements(实现)其中方法必须是抽象方法(必须重写)

protected 的方法在子类也可以使用

多态

允许一个接口被多种数据类型实现或一个类可以有多种形态 ,能利用父类的引用或指针来指向子类的对象,从而实现不同对象对同一消息做出不同相应

强转

强制转换能使父类转换为真正的子类,从而使用子类私有功能

泛型(只能是引用数据类型)

代码语言:javascript复制
  public class Box<T> {//泛型类写法
      private T item;
      public void set(T item) { this.item = item; }
      public T get() { return item; }
  }//其中T为泛型
 public class ListUtil {
     private ListUtil(){};
     public static <E> void addAll(ArrayList<E> list, E[] e)//泛型方法
     {
         Collections.addAll(list, e);
     }
     public static <E> void addAll(ArrayList<E> list, E...e)//可变参数里面可以传入多个参数==>三个点
     {
         Collections.addAll(list, e);
     }
 }
 //泛型不具备继承性,但数据具备继承性

0 人点赞