Java 基础
易错知识点
- 等号=用于比较两个变量的引用(即内存地址)是否相同,而equals用于比较两个变量的内容(即内存地址里存放的值)是否相等
- 构造类中方法时要进行空参构造和全参构造
- private只能在本类的方法中使用而protected可以再本类和子类的方法中使用
- Object是所有类的父类,是顶级父类所有类都继承它
- 创建对象调用方法时不能为null,否则会报错(空指针异常)
- 基本数据类型byte(1字节)short(2字节)int(4字节)long(8字节)
- 12315613616L(L表示long类型)
- 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修饰方法表明此方法不能重写 修饰类不能被继承 修饰变量则只能赋值一次
面向对象
可变参数
方法形参中最多只能写一个可变参数
如果方法中除了可变参数以外还有其他形参,可变参数要写在最后
可变参数本质上是一个数组
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);
}
}
//泛型不具备继承性,但数据具备继承性