【Java基础】类和对象

面向对象 对象
好处
类 继承
关键字:
接口
关键字:
实现该接口的类必须重写接口的所有方法

Java包()详解 ()
相当于一个文件夹,里面有很多文件或子文件夹
导入关键字建议用那个类就导入那个类,也可以导入*
语句要放在第一行,且只能有一个,前面可以有注释
语句在和类之间,可以有多个,且没有顺序要求
命名:全部小写
公司名.项目名.模块名
类和对象
访问修饰符
访问权限修饰符同类同包子类不同包
公开的
yes
【【Java基础】类和对象】yes
yes
yes
受保护的
yes
yes
yes
no
默认的
不写()
yes
yes

【Java基础】类和对象

文章插图
no
no
私有的
yes
no
no
no
用于修饰类的 方法 和属性,以及类的访问权限
命名属性 初始化
可以在生命属性的时候赋予初始值,但是在逻辑处理方面具有局限性,可以在构造函数中赋值
方法 重载
方法名相同,参数列表不同
不能仅仅依据修饰符或者返回类型的不同来重载方法 。
重载方法应该少用,因为它们会使代码的可读性大大降低
构造函数
参数 可变参数
可变长参数
如果不确定有多少个参数
可以在最后一个参数的类型后面添加一个省略号(三个点,…),然后添加一个空格和参数名 。然后可以使用该参数的任意数量(包括无)调用该方法 。
可变参数可以保证无法传入null,因为传入0个参数时,接收到的实际值是一个空数组而不是null 。
public class Test {public static void main(String[] args) {int[] a={1,2,3,4,5};testVarargs(1,2,3);//123testVarargs(a);//12345}public static void testVarargs(int... varargs){for (int i = 0; i < varargs.length; i++) {System.out.print(varargs[i]);}}}
不用提前创建数组了
如果与重载方法冲突,会优先匹配参数固定的方法
值传递和引用传递
Java 只有值传递
实例化
Point originOne = new Point(23, 94);
必须使用new来创建对象
new运算符通过为新对象分配内存并返回对该内存的引用来实例化类 。new运算符还调用对象构造函数 。
新运算符返回的引用不必分配给变量 。它也可以直接用在表达式中 。例如:
int height = new Rectangle().height;
请注意,在执行这个语句之后,程序不再有对创建的的引用,因为程序从来不在任何地方存储引用 。该对象未被引用,其资源可以由 Java 虚拟机自由回收 。
使用对象
在类内可以直接使用属性
在类外需要跟上一个点
垃圾收集器
一些面向对象的语言要求您跟踪您创建的所有对象,并在不再需要它们时显式地销毁它们 。显式地管理内存是冗长而且容易出错的 。
Java 平台允许您创建任意多的对象(当然,受到系统可以处理的内容的限制),而且您不必担心破坏它们 。当确定对象不再被使用时,JRE 就会删除它们 。这个过程称为垃圾收集 。
如果没有对该对象的更多引用,则该对象有资格进行垃圾收集 。当变量超出作用域时,保存在变量中的引用通常会被删除 。或者,可以通过将变量设置为特殊值 null 来显式删除对象引用 。请记住,一个程序可以对同一个对象有多个引用; 在该对象符合垃圾收集条件之前,必须删除对该对象的所有引用 。
this
在方法内部,可以使用一个隐含的变量this,它始终指向当前实例 。
因此,通过this.field就可以访问当前实例的字段 。
如果没有命名冲突,可以省略this 。
class Person{public String name;public int age;Person(String name,int age){this.name=name;//这里的this指向当前的对象this.age=age;}Person(){//在一个构造函数中调用另一个构造函数,形式:this(参数列表),而且必须在第一行this("张三",18);}public void run(){System.out.println("跑");}public void eat(){this.run();//可以通过this调用类的其他方法System.out.println("吃");}}
? 类名.静态方法名(推荐);对象名.静态方法名
常量
1.常量的值不可以改变
2.定义变量的时候,如果加上final修饰符,这个变量就变成了常量:
经常和搭配finalPI = 3.9793;
3.根据习惯,常量名通常全部大写,多个单词之间用下滑线分割
可以修饰类,属性,方法,局部变量注意事项代码块 代码块的基本介绍代码块的分类代码块的执行静态代码块,普通代码块,构造器的执行顺序
静态属性和静态代码块属于同一等级,同时存在时,执行顺序根据定义时的顺序来
? 但是构造器的第一行是调用父类的构造器,
? 然后默认隐含执行父类普通代码块,和普通属性的初始化
普通属性和普通代码块属于同一等级,同时存在时,执行顺序根据定义时的顺序来最后才是构造器的代码
类的加载代码块的用处当存在继承关系的时候
? 先加载父类的信息,因此先执行父类的静态代码块和静态属性的初始化
? 在加载子类的信息,因此再执行子类的静态代码块和静态属性的初始化
? 但是第一行是调用父类的构造器,
? 因此接着执行父类的执行父类的普通代码块和普通属性的初始化,再执行父类的构造器
? 最后执行子类的普通代码块和普通属性的初始化,子类的构造器
注意事项静态初始化块
static{}
一个类可以有任意数量的静态初始化块,它们可以出现在类体的任何位置 。
运行时系统保证按照静态初始化块在源代码中出现的顺序调用它们 。
嵌套类
嵌套类分为两类: 非静态类和静态类
非静态的嵌套类又被称为内部类
内部类又分为
深入理解java嵌套类、内部类
静态嵌套类
public class Test {public static void main(String[] args) {//外部其他类访问静态内部类//通过类名直接创建,前提是可以访问Outer.Inner inner = new Outer.Inner();//在外部类中编写一个方法,返回静态内部类实例Outer.Inner inner2 = Outer.getInner();}}class Outer{static class Inner{public void funcInner(){System.out.println("成员内部类的方法");}}public staticInner getInner(){//将其声明为静态,可以通过类名直接访问Inner inner = new Inner();return inner;}}
内部类