Java笔记

简介: Java基础易错点: equals与==区别,构造函数,访问修饰符,Object是所有类的父类,空指针异常。入门涉及Scanner输入,字符串处理,静态与非静态,类型转换,面向对象涵盖可变参数,内部类,JavaBean,重载,封装,继承,接口,多态,强转和泛型。注意静态方法不能调用非静态成员,可变参数本质是数组,泛型不具继承性。

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 入门

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 文件,内部类会被编译成单独的文件,名称为外部类名加 $ 内部类名,例如 Outer$Inner.class。
内存模型:
内部类对象存在于外部类对象的堆内存中,而局部内部类对象存在于方法栈帧中。
这些特性使得内部类成为 Java 中一种强大的工具,尤其是在设计模式和复杂逻辑处理中。

JavaBean(右键pte)

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 的方法在子类也可以使用

多态

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

强转

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

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

 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);
    }
}
//泛型不具备继承性,但数据具备继承性
目录
相关文章
|
2月前
|
Java 开发工具 Android开发
Kotlin语法笔记(26) -Kotlin 与 Java 共存(1)
本系列教程笔记详细讲解了Kotlin语法,适合需要深入了解Kotlin的开发者。若需快速学习Kotlin,建议查看“简洁”系列教程。本期重点介绍了Kotlin与Java的共存方式,包括属性、单例对象、默认参数方法、包方法、扩展方法以及内部类和成员的互操作性。通过这些内容,帮助你在项目中更好地结合使用这两种语言。
48 1
|
2月前
|
Java 开发工具 Android开发
Kotlin语法笔记(26) -Kotlin 与 Java 共存(1)
Kotlin语法笔记(26) -Kotlin 与 Java 共存(1)
34 2
|
2月前
|
Java 开发工具 Android开发
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
|
8天前
|
Java 开发工具 Android开发
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
|
1月前
|
安全 Java 编译器
Kotlin教程笔记(27) -Kotlin 与 Java 共存(二)
Kotlin教程笔记(27) -Kotlin 与 Java 共存(二)
|
1月前
|
Java 开发工具 Android开发
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
|
1月前
|
Java 编译器 Android开发
Kotlin教程笔记(28) -Kotlin 与 Java 混编
Kotlin教程笔记(28) -Kotlin 与 Java 混编
|
20天前
|
Java 编译器 Android开发
Kotlin教程笔记(28) -Kotlin 与 Java 混编
Kotlin教程笔记(28) -Kotlin 与 Java 混编
10 0
|
2月前
|
Java 编译器 Android开发
Kotlin语法笔记(28) -Kotlin 与 Java 混编
本系列教程详细讲解了Kotlin语法,适合需要深入了解Kotlin的开发者。对于希望快速学习Kotlin的用户,推荐查看“简洁”系列教程。本文档重点介绍了Kotlin与Java混编的技巧,包括代码转换、类调用、ProGuard问题、Android library开发建议以及在Kotlin和Java之间互相调用的方法。
28 1
|
2月前
|
安全 Java 编译器
Kotlin语法笔记(27) -Kotlin 与 Java 共存(二)
本教程详细讲解Kotlin语法,适合希望深入了解Kotlin的开发者。若需快速入门,建议查阅“简洁”系列教程。本文重点探讨Kotlin与Java共存的高级话题,包括属性访问、空安全、泛型处理、同步机制及SAM转换等,助你在项目中逐步引入Kotlin。
29 1