一、背景 最近在使用记事本编写带有包名并且有继承关系的java代码并运行时发现出现了很多错误,经过努力一一被解决,今天我们来看一下会遇见哪些问题,并给出解决办法。...因为我们在编写程序时用到了包名,所以运行类文件时,需要完整名称,命令修改为:java com.hafiz.zhang.Zi 我们会发现出现以下错误 ?...代表在当前目录下创建包路径)命令来进行编译,这样javac命令会自动帮我们创建包名所指定的文件夹,并在该文件夹下创建Zi.class文件。 ?...由此我们得出了在CMD窗口中使用javac和java命令进行编译和执行带有包名的具有继承关系的类的方式: 1.使用javac -d . *.java进行编译 2.使用java com.hafiz.Zi(...带包名的类全名)命令进行运行!
只要一个类中有存在native方法,它的类名就不会被混淆,native方法的方法名也不会被混淆,因为C++代码要通过包名+类名+方法名来进行交互。 但是类中的别的代码还是会被混淆的。...除此之外,第三方的Jar包都是会被混淆的,LitePal不管是包名还是类名还是方法名都被完完全全混淆掉了。 这些就是Android Studio打正式APK时默认的混淆规则。...虽说上面表格已经解释的很详细了,但是很多人对于keep和keepclasseswithmembers这两个关键字的区别还是搞不懂。确实,它们之间用法有点太像了,我做了很多次试验它们的结果都是相同的。...可以看到,现在android-support包中所有代码都被保留下来了,不管是包名、类名、还是方法名都没有被混淆。LitePal中的代码也是同样的情况: ?...的类名以及从父类继承的方法名不会被混淆,NativeUtils的类名和其中的native方法名不会被混淆,Utils的methodUnsed方法不会被移除,因为我们禁用了Shrink功能,其余的代码都会被混淆
-useuniqueclassmembernames 指定将相同的混淆名称分配给具有相同名称的类成员,并将不同混淆名称分配给名称不同的类成员(对于每个给定的类成员签名)。...例如,考虑两个不同的接口,它们包含具有相同名称和签名的方法。如果没有此选项,这些方法可能会在第一个混淆步骤中获取不同的混淆名称。...如果添加了包含实现两个接口的类的补丁程序,则ProGuard必须在增量混淆步骤中为这两种方法强制执行相同的方法名称。 原始模糊代码已更改,以保持结果代码的一致性。...|匹配方法名的任何单个字符| |*|匹配方法名的任何部分| ||在相同的选项中匹配第n个匹配的通配符| 类型可以包含以下通配符 |通配符|意义| |:—|:—| |%|匹配任何原始类型(boolean...也可以使用短类名(无包)或使用完整的类名来指定构造函数。和Java语言一样,构造函数规范有一个参数列表,但没有返回类型。 类访问修饰符和类成员访问修饰符通常用于限制通配类和类成员。
混淆的原理 Java 是一种跨平台、解释型语言,Java 源代码编译成的class文件中有大量包含语义的变量名、方法名的信息,很容易被反编译为Java 源代码。...混淆不仅能将代码中的类名、字段、方法名变为无意义的名称,保护代码,也由于移除无用的类、方法,并使用简短名称对类、字段、方法进行重命名缩小了程序的size。...它包括相同的 ProGuard 规则,但还包括其他在字节码一级(方法内和方法间)执行分析的优化,以进一步减小 APK 大小和帮助提高其运行速度。...(预检)两个步骤。....** 本包和所包含子包下的类名都保持 -keep class com.lily.test.* 保持该包下的类名 -keep class com.lily.test.** {*;} 保持包和子包的类名和里面的内容均不被混淆
->Output >jars、Library jars Proguard使用library jars来辅助对input jars类之间的依赖关系进行解析, library jars自身不会被处理,也不会被包含到...再压缩的步骤中,ProGuard或从上述的EntryPoint开始递归遍历,搜索那些类和类成员在使用。对于没有被使用的类和类的成员,就会在压缩阶段丢弃。...(windows大小写不敏感) -dontusemixedcaseclassnames # 指定不去忽略非公共的库的类 # 默认跳过,有些情况下编写的代码与类库中的类在同一个包下,并且持有包中内容的引用...,混淆后就会生成映射文件 # 包含有类名->混淆后类名的映射关系 # 然后使用printmapping指定映射文件的名称 -verbose -printmapping priguardMapping.txt...* { void *(**On*Event); } 一般第三方和自己的bean文件是不需要混淆的。
之前一直使用的是sun提供的comm.jar,且用他做了个读写卡测卡工具,结果只有32位系统下能用。 后来发现了RXTX,且接口和comm.jar提供的几乎一模一样,只是包名不一样。...RXTX是一个提供串口和并口通信的开源java类库,由该项目发布的文件均遵循LGPL协议。...RXTX的使用上与sun提供的comm.jar基本相同,编程时最明显的不同是要包含的包名由javax.comm.....* RxtxAPI 的核心是抽象的CommPort类(用于描述一个被底层系统支持的端口的抽象类,它包含一些高层的IO控制方法,这些方法对于所有不同的通讯端口来说是通用的)及其两个子类:SerialPort...类和ParallePort类。
META-INF: 签名文件夹:里面存放三个文件,有两个是对的资源文件做的SHA1 hash处理,一个是签名和公钥证书。...-dontpreverify # 有了verbose这句话,混淆后就会生成映射文件 # 包含有类名->混淆后类名的映射关系 # 然后使用printmapping指定映射文件的名称 -verbose...-dontusemixedcaseclassnames,这个是给Microsoft Windows用户的,因为ProGuard假定使用的操作系统是能区分两个只是大小写不同的文件名,但是Microsoft...,要在项目中搜索一下上述方法,将相应的类或者方法名称进行保留而不被混淆。...针对第三方jar包的解决方案 我们在Android项目中不可避免要使用很多第三方提供的SDK,一般而言,这些SDK是经过ProGuard混淆的,而我们所需要做的就是避免这些SDK的类和方法在我们APP
,依然反馈出name是一个私有的属性,显然这中方法的命名是很健壮的,所以JavaBean中的方法都是具有特定的命名规则,这样一个类中有这样的命名方法的方法,就可以当作JavaBean来使用。...除此之外,我们知道具有JavaBean特点的类,除了方法有一些特殊的命名规则外,其实和普通类一样,所以我们也可以将其当作普通的类来使用。 C. ...一个JavaBean类中的方法,去掉set或get前缀,剩余部分就是属性名,如果剩余部分的第二个字母是小写的,则把剩余部分的首字母改成小的。...Introspector类 Introspector这个类位于Java.beans包中,该类中的方法都是静态的,可以直接使用类名调用。...AddExternal Jars--选择要导入的jar包。即可。这样做有个问题就是如果jar路径发生变化。项目就不能使用到这个jar包。 B.
二,面向对象中的类: 生活中把具有相同特点和功能的物体分类为一个类,如白色的兔子是兔子类,人和兔子是动物类 编程中的类是将不同的对象按照相同特征(属性),相同功能(方法)的一个分类。...类中包含了属性和方法。 语法:访问修饰符 class 自定义类名{} 类名书写要求:首字母大写,和.java文件名相同。...对象调用属性和方法: 调用属性:对象名.属性 调用方法:对象名.方法名() 四,类中的属性 属性(成员变量)语法:(1)数据类型 属性名; (2)数据类型 属性名...构造方法名和类名相同,无返回类型。 创建对象(实例化类)时一般调用的是构造方法。...语法:package 包名; 包名书写要求:全小写字母,多个单词间.分割,通常为域名的倒写。如net.vkeji。 包语句的位置:包语句一般放在java源文件中的第一行。
一、JAVA的主要特性: 1、 一方面,Java语言的语法与C语言和C++语言非常接近,这使得大多数程序员都很容易学习和使用。...类名:对于所有的类来说,类名的首字母应该大写。如果类名由若干单词组成,那么每个单词的首字母应该大写,例如 MyFirstJavaClass 。 方法名:所有的方法名都应该以小写字母开头。...如果方法名含有若干单词,则后面的每个单词首字母大写。 源文件名:源文件名必须和类名相同。当保存文件的时候,你应该使用类名作为文件名保存(切记Java是大小写敏感的),文件名的后缀为.java。...(如果文件名和类名不相同则会导致编译错误)。 主方法入口:所有的Java 程序由public static void main(Stringargs)方法开始执行。...(即包中包含很多种类的类和接口) 当编译一个.java文件(即一个编译单元)时,在.java文件中的每个类都会有一个输出文件,而该输出文件的名称与.java文件中每个类的名称相同,只是多了一个后缀名.class
最起码你要提供项目的Group和Artifact,但如果你 点击了“Switch to the full version”链接,还可以指定额外的信息,比如版本号和基础包名。...可执行jars(有时候被 成为胖jars "fat jars")是包含你的编译后的类和你的代码运行所需的依赖jar的存档。...可执行jars和Java:Java没有提供任何标准的加载内嵌jar文件(即jar文件中还包含jar文件)的方法。如果你想发布一个自包 含的应用这就是一个问题。...为了解决该问题,很多开发者采用"共享的"jars。一个共享的jar简单地将来自所有jars的类打包进 一个单独的“超级jar”。采用共享jar方式的问题是很难区分在你的应用程序中可以使用哪些库。...在多个jars中如果存在相同的文 件名(但内容不一样)也会是一个问题。Spring Boot采取一个不同的途径,并允许你真正的内嵌jars。
,实参不需要指定数据类型; 方法的参数既可以是基本数据类型,也可以是引用数据类型,当有多个参数时,多个参数间以逗号分割; 重载:在同一个类中,方法名相同,方法参数个数、顺序或类型不同称为方法的重载,与方法的修饰符或返回值无关系...; 类与对象 类是模子,确定对象将拥有的特征(属性)和行为(方法),特点:类是对象的类型,具有相同属性和方法的一组对象的集合; 定义类的步骤: 定义类名; 编写类的属性; 编写类的方法; 使用对象的步骤...,构造方法与类同名且无返回值; 当无指定构造方法时,系统会自动添加无参的构造方法; 当有指定构造方法,无论是有参、无参的构造方法,都不会自动添加无参的构造方法; 构造方法的重载:方法名相同,但参数不同的多个方法...,方法名,参数类型及个数都要与父类继承的方法相同,才叫方法的重写; 继承的初始化顺序 初始化父类再初始化子类; 先执行初始化对象中属性,再执行构造方法中的初始化; final 修饰类,则该类不允许被继承...,而不受访问控制符的影响,但外部类是不能使用内部类的成员和方法; 若外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,若要访问外部类的成员变量,可以使用this关键字;
,实参不需要指定数据类型; 方法的参数既可以是基本数据类型,也可以是引用数据类型,当有多个参数时,多个参数间以逗号分割; 重载:在同一个类中,方法名相同,方法参数个数、顺序或类型不同称为方法的重载,与方法的修饰符或返回值无关系...; 类与对象 类是模子,确定对象将拥有的特征(属性)和行为(方法),特点:类是对象的类型,具有相同属性和方法的一组对象的集合; 定义类的步骤: 定义类名; 编写类的属性; 编写类的方法; 使用对象的步骤...,构造方法与类同名且无返回值; 当无指定构造方法时,系统会自动添加无参的构造方法; 当有指定构造方法,无论是有参、无参的构造方法,都不会自动添加无参的构造方法; 构造方法的重载:方法名相同,但参数不同的多个方法...; 继承 Java中是单继承; 优点: 子类拥有父类的所有属性和方法; 实现代码复用; 重写:返回值类型,方法名,参数类型及个数都要与父类继承的方法相同,才叫方法的重写; 继承的初始化顺序...,而不受访问控制符的影响,但外部类是不能使用内部类的成员和方法; 若外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,若要访问外部类的成员变量,可以使用this关键字;
Add JARs是依赖工程中的jar,Add External JARs是依赖绝对路径下的jar,一般推荐使用第一个这样工程移动位置了也无需二次配置。...建议把代码展示结构设置成树形结构方便查阅,右侧Outline视图调出来,可以查看类文件中成员变量和方法。 在Java Compiler中可以配置编译的jdk版本,当然这要依赖于你本地配置了哪些环境。...+G:鼠标焦点移到某个变量、类名或者方法上,使用快捷键,可以查询哪些代码使用了选中项 Alt+/:代码提示(注意可能由于设置的原因,快捷键会变为ctrl+space我也搞不清楚是不是和eclipse版本有关系...Win+home/end:快速的到文件的头部、尾部 Win+shift+O:快速导包,同名的类会弹窗让你自己去判断导入哪个 Win+alt+S:打开一些常用操作的菜单如:格式化、重写父类方法、生成get.../set方法、添加引用、排序、生成构造函数等等 Win+alt+R:重命名选中的变量名、方法名、类名,会自动修改全局的引用的地方 Alt+enter:查看类或者工程、包等的路径、编码等 上述快捷键均是在
属性:就是对象所具有特征 方法:就是对象所执行的行为或操作 对象:用来描述真实存在事物的一个实体,由一组属性和方法组成 封装:对象的属性和方法通常封装在一起,共同体现事物的特性,两者不可分割 类:将对象共同的属性和方法抽取出来就是类...类是模子,定义对象所具有的属性和方法 3.类和对象的关系: 类是抽象的,对象是具体的实体 对象是类的一个实体,类是对象的抽象概念 4.定义一个类的步骤: 1、新建一个class,给这个class...,需要先new一个需要调用方法的类的对象,然后通过对象名.方 法名的方式去调用方法 调用方法的时候,实际上就是去执行方法体中的代码 4.常见错误: 1、返回值数据类型必须和返回值类型一致 2、不可以返回多个值...2、初始值不同:必须给它赋值后才能去使用,系统不会给它赋初始值 3、在同一个类中,不同的方法中可以存在相同的命名,同名的两个变量没有任何关系 在同一个类中,允许局部变量和成员变量命名相同,如果两个命名一样...包名; 导入包,可以将在这个包中的所有类导入到我们这个类中,导入后才能使用该包中的类 通过ctrl+鼠标左键点击进入定义方法的位置 八、字符串 1.字符串:就是一个或多个字符组成 2.声明字符串:
子类继承多个父类 1) 如果多个父类的方法名相同,子类会默认继承第一个父类的方法 2) 如果父类的属性名相同,子类也会继承第一个父类的属性 i. 为什么会继承第一个父类的属性?...两个父类都有init方法,默认会继承第一个也会执行第一个init方法 4. 子类重写父类的同名属性和方法 a....Super().同名方法名 -> 单继承 总结: 如果子类继承了多个父类(多个父类有相同的方法),而且子类重新定义了这个方法 i....赋值 有且只有一种方式 格式: 类名.类属性名 = 值 xm=Person("小明",20) 给这个对象添加了一个和类属性名相同的实例属性 xm.country="荷兰" #获取实例属性的值 print...导入包 Import 包名.模块名 使用格式:包名.模块名 17.
面向对象的编程语言是利用类和对象将问题的数据和操作封装起来,并利用标准接口和外界交互,是代表客观世界实体的各种类在程序中能独立和继承。其特点要求程序具有封装性、继承性、多态性。...封装的好处有哪些? 1.源代码可独自编写和维护 2.既保证不受外界干扰,也有利于代码的重用 3.提高生产效率和开发周期 继承 继承是描述两个类之间的关系。...2.类与包 类 类是对具有相同特性对象的封装的组合,是java最基本的单元....对一些类的对象具有相同的属性值,可利用static来声明,没有被static 修饰的变量是实例变量| 访问类变量: 类名.类变量名 访问成员变量 对象名.成员变量名 成员方法...返回对象的引用地址 java 规定成员变量在使用之前必须赋值,可以赋值为null 对象的构造方法 构造方法名要求和类名相同,没有返回值,一个类可以创建多个构造方法,但是这些构造方法的参数相同.
(面向过程-->面向对象)就是(执行者-->指挥者)的过渡。 什么是类? 类就是具备某些共同特征的实体的集合,它是一种抽象的数据类型,它是对所具有相同特征实体的抽象。...方法的重载 方法名相同但形参列表不同(个数不同、类型不同、顺序不同),在调用方法时率先调用相同类型的数据类型,多个方法调用时,按照顺序调用(char,byte,short 类的创建及对象的创建 类的格式: 【修饰符】+类名【extends+父名】+【implements+接口名】{ //类体,包括类的成员变量和成员方法 } 对象的格式: 类名+对象名 = new+类名()...非静态的方法需要创建对象来访问类中的方法,而静态的方法可以直接用类名来访问或者使用对象名。 对象名.方法名 或 类名....包的作用 为了解决类名重名的问题 名字全部都是小写,不能是关键字,一般都是公司域名倒着写用.连接。 在使用其他包下的类需要导包操作。 想使用其他包下的同名类需要手动写所在的包。
方法体 } 构造器的修饰符是可以默认的 构造器没有返回值,只有构造器可以没有返回值,没有返回值的只有构造器 方法名必须和类名一样 参数列表和成员方法一样的规则 构造器的调用,由系统完成...是用来向下继续引目录的,例如在src下创建包com.abc,是src下有com,com下有abc 当有一个相同类名被实例化时,想要实例化另一种类,那么需要用 ....操作符来标识是哪个包(就是加上包名) 如果引用两个相同名字的类,编译器会报错,不能同时引两个Dog 包的命名规则 只能包含数字,字母,下划线,小圆点,但是不能用数字开头,不能是关键字或保留字...引入的主要目的是:使用该包下面的类 和python的import相同,可以只导入包中的某个类,也可以使用*去导入所有的包 需要使用哪个类就引入哪个类,不一次全部引入某个包中的所有类 package...,可以在名字后面加上下划线__ 继承 为什么需要继承 编写两个类,一个大学生,一个大学毕业生,发现两个类的属性和方法有很多是相同的 继承提高代码复用性 快速入门 当多个类存在相同的属性和方法时
领取专属 10元无门槛券
手把手带您无忧上云