大纲包和导入包概述包存在的意义在于防止命名冲突带来的不便。包类似于文件夹,文件夹中有各种文件。包与包之间的从属关系由“.”连接,类似于父文件夹中的子文件夹。比如java.lang.String就是java文件夹下lang文件夹下的String文件。java.io.InputStream是java文件夹下io文件夹下的InputStream文件。同一个文件夹中不能存在同名文件,但同名文件允许存在于不同名称的文件夹中,所以不同的文件夹(即不同的包中允许有相同的类名)。为了便于管理大型软件系统中大量的类,解决类命名冲突的问题,Java引入了包机制,为类提供多个类命名空间。一般命名格式为:公司域名反序+函数名|模块名称。package语句作为Java源文件中的第一条语句,表示文件中定义的类所在的包。(如果默认该语句,请指定一个未命名的包)。包pkg1[.pkg2[.pkg3…]];示例:包com.java01.test;Java编译器将包对应到文件系统的目录管理。在包声明中,使用“.”表示包(目录)层级,比如使用语句:packagecom.java01,那么这个文件中的所有类都位于.comjava01目录下注意:不要定义和jdk相同的包和类,否则会造成很多你认为莫名其妙的问题Addpackages,不要使用defaultpackages。com.oop和com.oop.test,这两个包没有包含关系,是两个完全独立的包。从逻辑上看,后者似乎是前者的一部分。import如果一个类有包名,在其他包下使用该类时,必须使用完全限定名(简称全名或全类名,com.java01.MyClass),编译器才能找到该类;您还可以使用import在文件开头引入要使用的类。导入java.util.Scanner;导入java.io.*;//模糊匹配当前io包下的所有类publicclassImportDemo{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);//因为使用了import关键字来导包,所以可以使用java.util.ArrayListlist=newjava.util.ArrayList();//权限命名//导入集合注意:不要导入错包//使用*,有歧义MatchFilefile=newFile("D://test.txt");InputStreamisInputStream=newFileInputStream(文件);}}不需要使用import的类有:语言包下的类(java.lang)(String,System...)同包下类的静态导入:import语句不仅可以导入类,而且还增加了引入静态方法的功能类ImportDemo{publicstaticvoidmain(String[]args){out.println(PI);罪恶(1.1);}}将类放入包中,在类的源文件第一行使用包,必须保证类的class文件位于正确的目录下,如果要访问另一个类:写全称引入模糊匹配(引入的包类下均使用),会降低编译速度,但不影响运行速度。具体的类名静态导入同包下的类中,不需要导入JDK常用包简介:java.lang-语言包:语言中常用的函数,如:String,Math,System,Integer,Thread...java.util–工具包:提供了一些实用工具类,如:容器(List、Set、Map...)、日期类:操作远程资源的类,如:InetSocketAddress、DatagramPacket、ServerSocket...java.sql–数据库包:操作JDBC的类,Connection,Statement,ResultSet....垃圾收集机制(gc)垃圾收集概述垃圾收集机制每个程序员都遇到过内存溢出。程序运行时,内存空间是有限的,那么如何及时清除不用的对象,释放内存,这就是GC要做的事情说到垃圾回收机制(GC),大部分人都把这项技术当成伴侣Java语言的产物。其实GC的历史比Java的还要长。早在1960年,Lisp语言就使用了动态内存分配和垃圾收集技术。【外链图片传输失败,源站可能有防盗链接机制,建议保存图片直接上传(img-T83siW7z-1609146902209)(1554324687-762w_garbage2.jpg)】程序员都知道jvm内存结构分为5大区:程序计数器、虚拟机栈、本地方法栈、堆区、方法区。其中,虚拟机栈、本地方法栈和程序计数器这三个区域是随线程诞生和销毁的,所以不需要考虑过多的内存垃圾回收,因为当一个方法调用结束或者一个线程结束时,内存自然会被摧毁。其次是回收。我们将重点关注方法区和堆区。这部分内存的分配和回收是动态的,这是垃圾收集器需要注意的。GC主要做清理对象和组织内存的工作。不同语言的对象空间释放:传统的C/C++语言需要程序员负责回收分配的内存。显式垃圾回收的缺点:程序忘记及时回收,导致内存泄漏,降低系统性能。程序错误的回收了程序核心类库的内存,导致系统崩溃。Java语言不需要程序员直接控制内存回收。JRE自动回收后台不再使用的内存,这称为垃圾回收(GarbageCollection)。可以提高编程效率。保护程序完整性。它的开销会影响性能。Java虚拟机必须跟踪程序中有用的对象并确定哪些是无用的。垃圾回收机制要点:垃圾回收机制只回收JVM堆内存中的对象空间。不能对其他物理连接做任何事情,例如数据库连接、输入流输出流和套接字连接。目前的JVM有多种垃圾回收算法,性能各不相同。垃圾回收的发生是不可预测的,程序无法精确控制垃圾回收机制的执行。对象的引用变量可以设置为null,表示垃圾回收机制可以回收对象。程序员可以通过System.gc()或者Runtime.getRuntime().gc()来通知系统进行垃圾回收,这会有一定的效果,但是系统是否会进行垃圾回收还不确定。垃圾回收机制在回收任何对象之前,总是会调用它的finalize方法(如果重写这个方法,让一个新的引用变量再次引用这个对象,这个对象就会被重新激活)。永远不要主动调用对象的finalize方法,应该由垃圾回收机制调用。block和debugblock{}在java中有各自的作用域,分为静态代码块构造代码块、普通语句块、同步代码块声明位置类、类外的方法、fsynchronized(){}中的函数methodsoutsidemethods整个类进行一定的初始化操作(静态成员属性赋值...)构造代码块用于对象初始化操作(静态或非静态成员属性赋值...)声明一些临时变量等...控制并发执行的时机第一次加载类时,只执行一次,如果有多个静态块,创建对象时从上到下执行,在执行构造函数代码之前执行,如果有多个,则执行从上到下跟随方法执行,执行方法注意:classfirst当类第一次加载时,静态代码块先执行;当类被多次加载时,静态代码块只执行一次;静态块通常用于初始化静态变量。它在类初始化时执行,而不是在创建对象时执行。不能在静态初始化块中访问非静态成员。构造函数在将执行静态块的构造函数代码之前编译,静态块仅在第一次使用该类时加载。构造块先于构造函数执行,每次创建对象时执行debug。在学习或者开发的过程中,难免会遇到bug。为了能够快速调试,可以使用debug调试工具。调试Java程序非常简单,主要包括设置断点、开始调试、单步执行、结束调试。2)启动调试Eclipse提供了几种启动程序调试(Launch)的方法,分别是通过菜单(Run–>Debug),图标(“greenbug”),右击->DebugAs。弹出提示,需要切换到Debug(调试)工作区,勾选“Remembermydecision”,记住选择,下次就不会提示了,然后点击【Yes】。3)单步执行主要是利用上面提到的几种视图进行调试,其中调试视图中的几个按钮有快捷键:StepReturn(F7):表示退出当前方法,返回到调用层。StepOver(F6):表示运行下一行代码。StepInto(F5):表示进入当前方法。[外链图片传输失败,源站可能有防盗链机制,建议保存图片直接上传(img-Hf8bErH7-1609146902222)(/1581682185893.png)]4)Enddebugging终止调试通过终止命令终止本地程序。Object-Oriented-Inheritance继承“树上有一只鸟,树下有两只兔子,有多少种动物和生物?”这里是继承的概念。继承:父子继承的本质在于抽象。类是对象的抽象,继承是对某一批类的抽象,从而实现对现实世界更好的建模。继承的作用:使用继承可以提高代码的可重用性。如何使用继承:父类|超级类|基类:根据一些子类抽象,提取图像部分,定义在父类subclass|派生类:子类继承父类,有权使用父类中的内容,可以定义子类的新内容,所以子类是父类的延续+扩展。extends关键字表示“扩展”。子类是父类的扩展。在java中,使用extends关键字来实现类的继承机制。语法规则:
