面向对象 对象
好处
类 继承
关键字:
接口
关键字:
实现该接口的类必须重写接口的所有方法
包
Java包()详解 ()
相当于一个文件夹,里面有很多文件或子文件夹
导入关键字建议用那个类就导入那个类,也可以导入*
语句要放在第一行,且只能有一个,前面可以有注释
语句在和类之间,可以有多个,且没有顺序要求
命名:全部小写
公司名.项目名.模块名
类和对象
访问修饰符
访问权限修饰符同类同包子类不同包
公开的
yes
【【Java基础】类和对象】yes
yes
yes
受保护的
yes
yes
yes
no
默认的
不写()
yes
yes
![【Java基础】类和对象](http://img.gansulong.com/231217/1223192301-0.jpg)
文章插图
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;}}
内部类
- 零基础如何入门 Python 爬虫?
- javaCC---可读到可编程的桥梁
- 【精选实践】TiDB 在 360 云平台的落地及实战干货
- 【求问帖】软件开发遭遇什么困境?如何从“普罗克鲁斯特斯之床”逃脱?
- 1-17 如果你想开发一个应用
- 【愚公系列】2023年10月 WPF+上位机+工业互联 054
- 桌面虚拟现实系统是一种以计算机为基础,基于虚拟现实技术的挖掘机模拟操作.pdf
- 中风的康复治疗
- Java基础50道高频考点面试题,精选汇总,值得收藏
- 电脑公司特别版9 2 电脑公司特别版v7.0下载