Java编程
介绍java相关知识与实例
阳光下的米雪
在校研究生
展开
-
内存溢出问题处理步骤与jprofile软件的使用
最近做项目遇到了内存溢出问题,以vslice组件为例来介绍,遇到内存溢出问题该如何处理以及使用jprofile分析生成的dump文件,找出内存占有较大对象,并优化该模块代码,针对内存溢出问题,整理了一份处理内存溢出问题的步骤。...原创 2022-07-15 17:31:22 · 1481 阅读 · 2 评论 -
Java反射之Java通过反射了解集合泛型的本质
集合泛型的本质Java集合中的泛型是为了防止错误输入的,只在编译阶段有效。绕过编译阶段就无效了。验证泛型只在编译阶段有效通过方法的反射操作,可以绕过编译。public class MethodDemo2 { public static void main(String[] args) { ArrayList list = new ArrayList(); ArrayList<String> list1 = new ArrayList<>原创 2021-12-09 10:21:43 · 392 阅读 · 0 评论 -
Java反射之方法的反射
方法的反射获取某个方法:通过方法名称和方法的参数列表唯一确定某个方法方法的反射操作method.invoke(对象,参数列表)方法的反射步骤获取一个方法,首先要获取类的信息,获取类的信息必须先获取类的类类型获取方法由名称和参数列表来决定 getMethod()获取的是public的方法 getDeclaredMethod()方法获取的是自己生成的方法方法的反射实例方法如果没有返回值,返回null,有返回值则返回具体的返回值public class MethodDemo原创 2021-12-08 20:40:54 · 443 阅读 · 0 评论 -
Java反射之Java获取成员变量构造函数信息
Java获取成员变量构造函数信息获取构造函数信息构造函数也是对象,是java.lang.reflect.Constructor对象获取所有的Public的构造函数getConstructors()获取自己声明的构造函数getDeclaredConstructors()完整例子public class ClassUtil { /** * 打印类的信息,包括类的成员函数、成员变量 */ public static void printClassMe原创 2021-12-08 16:27:14 · 227 阅读 · 0 评论 -
Java反射之Java获取方法信息
Java获取方法信息本文主要获取类的信息(包括类的成员函数、成员变量)获取类的信息前面文章已经说过了,有三种方式,本文就不在赘述,采用其中的一种,通过实例对象.getClass()获取类类型,从而获取类的名称 Class c = obj.getClass();//传递的是哪个子类的对象,c就是该子类的类类型 c.getName() public static void main(String[] args) { Class c1 = int.class; Cl原创 2021-12-08 15:24:16 · 884 阅读 · 0 评论 -
Java反射之Java动态加载类
Java动态加载类Class.forName(“类的全称”)不仅表示了类的类类型,还代表了动态加载类编译时刻加载类是静态加载类,运行时刻加载类是动态加载类new 创建对象是静态加载类,在编译时刻就需要加载所有可能使用到的类Word word = new Word();通过动态加载类可以解决该问题Class c = Class.forName(args[0]);动态加载类例子public class DynamicLoading { public static void原创 2021-12-08 14:07:32 · 415 阅读 · 0 评论 -
Java反射之Class类的使用
Java反射之class类的使用Class类在面向对象的世界里,万事万物皆对象类也是对象,类对象的表示(类是对象,类是java.lang.Class类的实例对象)Class类的使用任何一个类都是Class的实例对象,这个实例对象都有三种表示方式,三种表示方式见以下代码:public class UseClass { public static void main(String[] args) { //Foo的实例对象如何表示 Foo foo = new原创 2021-12-08 10:56:08 · 339 阅读 · 0 评论 -
java多线程---Volatile实现可见性原理
Volatile实现可见性原理Volatile关键字能够保证Volatile变量的可见性不能保证Volatile变量复合操作的原子性Volatile实现内存可见性深入来说:通过加入内存屏障和禁止重排序优化来实现对于Volatile变量执行写操作时,会在写操作后加入一条store屏障指令对于Volatile变量执行写操作时,会在读操作前加入一条load屏障指令线程写Volatile变量的过程:改变线程工作内存中Volatile变量副本的值将改变后的副本的值从工作内存刷新到主内存线程原创 2021-12-02 17:25:26 · 508 阅读 · 0 评论 -
java多线程---Synchronized实现可见性原理
Synchronized实现可见性原理可见性要实现共享变量的可见性,必须保证两点:线程修改后的共享变量值能够及时从工作内存刷新到主内存中其他线程能够及时把共享变量的最新值从主内存更新到自己的工作内存中Java语言层面支持的可见性的实现方式synchronizedvolatilesynchronized实现可见性synchronized能够实现:原子性(同步)可见性JMM关于synchronized的两条规定: 1.线程解锁前,必须把贡献变量的最新值刷新到主内存中 2.原创 2021-12-02 15:25:43 · 728 阅读 · 0 评论 -
Java多线程---内存可见性介绍
Java多线程—内存可见性可见性可见性:一个线程对共享变量值得的修改,能够及时地被其他线程看到。共享变量:如果一个变量在多个线程的工作内存中都存在副本,那么这个变量就是这几个线程的共享变量。java内存模型(JMM)java内存模型(Java Memory Model)描述了Java程序中各种变量(线程共享变量)的访问规则,以及在JVM中讲变量存储到内存和从内存中读取变量这样的底层细节。所有变量都存储在主内存中每个线程都有自己独立的工作内存,里面保存该线程使用到的变量的副本(主内存中该变量的原创 2021-12-02 14:06:40 · 242 阅读 · 0 评论 -
对象的行为---方法操作实例变量
对象的行为—方法操作实例变量状态影响行为,行为影响状态。1.对象由状态和行为1)类所描述的是对象知道什么与执行什么?类是对象的蓝图。在编写类时,你是在描述Java虚拟机应该如何制造该类型的对象。你已经知道每个对象有独立的实例变量值。2)同一类型的每个对象能够由不同的方法和行为吗?任一类的每个实例都带有相同的方法,但是方法可以根据实例变量的值来表现不同的行为。2.方法的参数1)你可以...原创 2019-10-24 17:40:10 · 514 阅读 · 0 评论 -
深入多态---接口与抽象类
深入多态—接口与抽象类什么是抽象类?它是无法初始化的类抽象类有什么用途?防止类被初始化抽象类除了被继承过之外,是没有用途、没有值、没有目的1.抽象与具体不是抽象的类就被称为具体类。2.抽象的方法方法标记为abstract的。抽象的类代表此类必须要被extends过,抽象的方法代表此方法一定要被覆盖过。抽象的方法没有实体eg:public abstract void eat();...原创 2019-11-19 16:43:51 · 164 阅读 · 0 评论 -
基本概念---进入java的世界
基本概念—进入java的世界Java的工作方式它的目标是让你写出一个应用程序且能够在你的朋友所拥有的任何设备上执行。工作过程如下:step1(源代码):编写源代码step2(编译器):用编译器运行源代码。编译器会检查错误,如果有错就要改正才能产生正确的输出。step3(输出):编译器会产生字节码。任何支持Java的装置都能够把它转译称可执行的内容。编译后的字节码与平台无关。step4...原创 2019-10-22 17:29:18 · 155 阅读 · 0 评论 -
编写程序---超强力方法
编写程序—超强力方法创建一个类似战舰的游戏:攻击网站你会创建一个攻击网站游戏,他有7*7的格子与3间达康公司。每个达康网站占用3个格子。1.首先进行高层设计我们需要类(Game和DotCom类)和方法,那就必须了解游戏的流程。游戏的基本思路:1)玩家启动游戏(1)计算机创建3个达康网站(2)将此3个达康网站停在虚拟战场上2)游戏开始重复下面的操作直到所有达康网站被歼灭为止(1)...原创 2019-10-30 11:57:55 · 513 阅读 · 0 评论 -
类与对象----拜访对象村
char2 类与对象----拜访对象村1.以对象来思考当你在设计类时,要记得对象是靠类的模型塑造出来的。你可以这样看:1)对象是已知的事物2)对象会执行的动作对象本身已知的事物被称为:实例变量。它们代表对象的状态(数据),且该类型的每一个对象都会独立的拥有一份该类型的值。对象可以执行的动作被称为:方法。在设计类时,你也会设计出操作对象数据的方法。对象带有读取或操作实例变量的方法。eg...原创 2019-10-23 17:41:39 · 176 阅读 · 0 评论 -
认识Java的API---使用Java函数库
认识Java的API—使用Java函数库Java内置有数百个类1.数组不够用的时候—ArrayList其实真的有这样的集合,但它不是数组,而是整个ArrayList。它是Java函数库中的另一个类。ArrayList方法:1)add(Object elem):向list中加入对象参数2)remove(int index):在索引参数中移除对象3)remove(Object elem)...原创 2019-10-31 16:28:48 · 306 阅读 · 0 评论 -
对象村的优质生活---继承与多态
对象村的优质生活—继承与多态覆盖的意思是由子类重新定义继承下来的方法以改变或延伸此方法的行为1.继承的运行方式了解继承在设计继承时,你会把共同的程序代码放到某个类中,然后告诉其它的类说此类是它们的父类。当某个类继承另一个类的时候,也就是子类继承自父类。2.继承层次的设计(1)找出具有共同属性和行为的对象*用继承来防止子类中重复出现的程序代码(2)设计代表共同状态与行为的类(3)决...原创 2019-11-12 16:00:50 · 125 阅读 · 0 评论 -
对象的前生今世---构造器与垃圾收集器
对象的前生今世—构造器与垃圾收集器1.栈与堆:生存空间1)在Java中,程序员会在乎内存中的两种区域:对象的生存空间堆(heap)和方法调用及变量的生存空间(stack)。当Java虚拟机启动时,它会从底层的操作系统取得一块内存,并以此区段来执行Java程序。至于有多少内存,以及你是否能够调整它都要看Java虚拟机与平台的版本而定。栈:方法调用和局部变量堆:所有对象(又称为可垃圾回收的堆)...原创 2019-11-26 20:33:01 · 133 阅读 · 0 评论 -
认识变量---primitive主数据类型和引用
认识变量—primitive主数据类型和引用变量有两种:primitive主数据类型(用来保存基本类型的值:整数、布尔、字符和浮点型)和引用1.声明变量eg:int count;规则:1)变量必须拥有类型2)变量必须要有名称primitive主数据类型:boolean 位数由JVM决定 true或falsechar 16bits 0~65535byte ...原创 2019-10-23 21:32:38 · 1094 阅读 · 0 评论 -
Java使用Thumbnails实现图片指定大小压缩
Java使用Thumbnails实现图片指定大小压缩项目中有个要求,对上传服务器的图片大小进行判断,大于50k的图片要进行压缩处理,让其小于50k后在上传。针对图片压缩,一般有以下两种方法:1)java api的ImageIO实现图片压缩,但效果不好,图片压缩后出现变红现象,看了网上的博客普遍都说bug比较多,会有OOM内存溢出的现象。2)该方法使用的是谷歌的Thumbnails插件来实现图片压缩。本文主要介绍的是使用插件实现图片压缩。实现:Thumbnails.of("源文件路径")转载 2021-08-02 20:25:16 · 10493 阅读 · 11 评论 -
使用Map快速找出两个对象集合中属性相等的对象
快速找出两个对象集合中属性相等的对象一般来说,找出两个对象集合中属性相等的对象,我们常规方法是直接写两层for循环然后进行判断,代码如下: for (CameraInfoDto c : cameras) { for (String s : exsistPlate) { if (c.getCameraIndexCode().equals(s)) { CameraInfoDto cid = new CameraInfoDto(); cid原创 2021-06-30 16:50:49 · 1637 阅读 · 2 评论 -
Java--获取数组中的最后一个元素以及除了最后一个元素剩余的其他元素
获取数组中的最后一个元素以及除了最后一个元素剩余的其他元素废话不多说,直接上代码:public class TestArray { static boolean empty(int a[]) { return (a.length == 0); } static int getFirst(int a[]) { return a[0]; } static int getLast(int a[]) { return原创 2021-03-18 14:08:19 · 26088 阅读 · 0 评论 -
抽象类
抽象类在定义类时,前面加上abstract关键字修饰的类叫抽象类。 抽象类中有抽象方法,这种方法是不完整的,仅有声明而没有方法体。抽象方法声明语法如下:abstract void f(); //f()方法是抽象方法那我们什么时候会用到抽象类呢?1.在某些情况下,某个父类只是知道其子类应该包含怎样的方法,但无法准确知道这些子类如何实现这些方法。也就是说抽象类是约束子类必须要实现哪些方法,...原创 2020-01-15 14:26:44 · 123 阅读 · 0 评论 -
多态
多态多态是指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。多态也称作动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。通俗地讲,只通过父类就能够引用不同的子类,这就是多态,我们只有在运行的时候才会知道引用变量所指向的具体实例对象。向上转型要理解多态必须要明白什么是"向上转型"...原创 2020-01-15 14:10:59 · 115 阅读 · 0 评论 -
方法重载与重写
方法重载方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数。方法重载一般用于创建一组任务相似但是参数不同的方法。public class Test{ void f(int i){ System.out.println("i="+i); } void f(float f){ System.out.pri...原创 2020-01-03 09:47:16 · 114 阅读 · 0 评论 -
面向对象6---继承、super定义及其用法
继承继承可以看成是类与类之间的衍生关系。比如狗类是动物类,牧羊犬类又是狗类。于是我们可以说狗类继承了动物类,而牧羊犬类就继承了狗类。于是狗类就是动物类的子类(或派生类),动物类就是狗类的父类(或基类)。所以继承需要符合的关系是:is-a,父类更通用,子类更具体。语法:class 子类 extends 父类例如我们定义了一个 Animal 类,再创建一个 Dog 类,我们需要它继承 An...原创 2019-12-26 09:49:36 · 217 阅读 · 0 评论 -
面向对象5---封装、this定义及其用法
封装封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别这样做有什么好处?1.只能通过规定的方法访问数据2.隐藏类的实例细节,方便修改和实现。我们在开汽车的时候,只用去关注如何开车,我们并不在意车子是如何实现的,这就是封装。如何去实现类的封装呢?1.修改属性的可见性,在属性的前面添加修饰符(private)2.对每个值属性提供对外的公共方法访问,...原创 2019-12-26 09:35:40 · 133 阅读 · 0 评论 -
面向对象4---static、静态方法、权限修饰符定义及其用法
static静态成员Java 中被 static 修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。静态成员可以使用类名直接访问,也可以使用对象名进行访问。public class StaticTest{ public static String s="shiyalou"; public static void main(Strin...原创 2019-12-26 09:11:41 · 184 阅读 · 0 评论 -
面向对象3---构造函数、引用与对象实例定义及其用法
构造函数在面向对象中有一个非常重要的知识点,就是构造方法。每个类都有构造方法,在创建该类的对象的时候他们将被调用,如果没有定义构造方法,Java 编译器会提供一个默认构造方法。 创建一个对象的时候,至少调用一个构造方法。比如在新建一个对象new Object(),括号中没有任何参数,代表调用一个无参构造方法(默认构造方法就是一个无参构造方法)。构造方法的名称必须与类名相同,一个类可以定义多个构造...原创 2019-12-25 17:43:57 · 180 阅读 · 0 评论 -
面向对象2---对象的创建及其用法
对象创建对象的语法如下:类名 对象名 = new 类名();比如对People这个类,我想实例化LiLei这个人。LiLei 的数据类型便是 People 这个类型。(类可以看成使我们自己定义的数据类型)People LiLei = new People();定义类的时候不会为类开辟内存空间,但是一旦创建了对象,系统就会在内存中为对象开辟一块空间,用来存放对象的属性值和方法。新建一个...原创 2019-12-25 17:31:24 · 167 阅读 · 0 评论 -
面向对象1---面向对象基本概念、类定义及其用法
面向对象基本概念对象,从字面意思来看就是我们面对的物象。由此便可以知道,万事万物皆为对象。比如:一台电脑,一辆汽车,一部手机等等都是对象。面向对象,从字面意思来看就是我们人面对着一个对象。其实就是指我们从这个对象的整体出发去看它,它由哪些部件组成,它可以做到哪些事情。比如我们想要买一部手机,我们想要内存大一点的,最新款的,CPU 运算快一点的,能实现发短信和打电话功能的手机。那么这部手机是不...原创 2019-12-25 17:14:32 · 295 阅读 · 0 评论 -
基础语法(下)8---用户输入操作小练习
用户输入操作Java 可以使用java.util包下的Scanner类来获取用户的输入。使用import java.util.Scanner;即可导入 Scanner,使用方法示例:import java.util.Scanner;public class ScannerDemo{ public static void main(String[] args){ Sc...原创 2019-12-25 15:27:39 · 218 阅读 · 0 评论 -
基础语法(下)7---二维数组定义及其用法
二维数组二维数组可以看成是一间有座位的教室,座位一般用第几排的第几个进行定位,每一个座位都有一个行和一个列的属性,一排的座位相当于一个一维数组,所以可以将二维数组简单的理解为是一种“特殊”的一维数组,它的每个数组空间中保存的是一个一维数组。二维数组也需要声明和分配空间。语法:数据类型 [][] 数组名 = new 数据类型[行的个数][列的个数];//或者数据类型 [][] 数组名;...原创 2019-12-25 11:45:17 · 267 阅读 · 0 评论 -
基础语法(下)6---数组定义及其用法
数组所谓数组,是有序的元素序列。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便,把具有相同类型的若干元素按无序的形式组织起来的一种形式。这些无序排列的同类数据元素的集合称为数组。数组是用于储存多个相同类型数据的集合。数组就是相同数据类型的...原创 2019-12-25 11:25:11 · 164 阅读 · 0 评论 -
基础语法(下)5---跳转语句之break、continue区别与用法
跳转语句break关键字经常用在条件和循环语句中,用来跳出循环语句。continue关键字的作用是跳过循环体中剩余的语句执行下一次循环。public class Jump{ public static void main(String[] args){ //break for(int i=1;i<=10;i++){ Sys...原创 2019-12-25 11:05:10 · 208 阅读 · 0 评论 -
基础语法(下)4---String类小练习
练习题:字符串处理新建StringUtil.java,你需要实现以下需求:1.从控制台输入一行字符串2.去除字符串中的所有空格3.打印去除空格后的字符串示例:输入:shi ya n lou输出:shiyanlouimport java.util.Scanner;public class StringUtil{ public static void main(St...原创 2019-12-25 10:34:52 · 170 阅读 · 0 评论 -
基础语法(下)3----for循环及其用法
for语句for语法:for(循环变量初始化; 循环条件; 循环变量变化){ 循环操作}for 相比 while 和 do-while 语句结构更加简洁易读,它的执行顺序:1.执行循环变量初始化部分,设置循环的初始状态,此部分在整个循环中只执行一次2.进行循环条件的判断,如果条件为 true,则执行循环体内代码;如果为 false ,则直接退出循环3.执行循环变量变化部分,...原创 2019-12-24 10:29:20 · 133 阅读 · 0 评论 -
基础语法(下)2---流程控制之switch、while、do...while用法
switch语句当需要对选项进行等值判断时,使用 switch 语句更加简洁明了。比如:摇号摇到 1 的得一等奖,摇到 2 的得二等奖,摇到 3 的等三等奖,摇到其他的没有奖。语法:switch(表达式){ case 值1: 代码块1 break; case 值2: 代码块2 break; ... ...原创 2019-12-24 10:07:53 · 297 阅读 · 0 评论 -
基础语法(下)1---流程控制之if语句及其用法
流程控制流程控制对任何一门编程语言都是至关重要的,它为我们提供了控制程序步骤的基本手段。常见对主要分为,条件语句、循环语句、跳转语句。if语句if 语句是一种判断语句。语法:if(条件){ 条件成立时执行的代码}if…else 语句当条件成立时,则执行 if 部分的代码块; 条件不成立时,则进入 else 部分。例如,如果一个月天数大于 30 天,则为大月,否则为小月。...原创 2019-12-24 10:07:09 · 665 阅读 · 0 评论 -
基础语法(上)3----关键字、方法定义以及用法
关键字Java 的关键字对 java 的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等,关键字不能用作变量名、方法名、类名、包名。Java 关键字有如下表所列,目前共有 50 个 Java 关键字,其中,"const"和"goto"这两个关键字在 Java 语言中并没有具体含义。方法Java 中的方法,可以将其看成一个功能的集合,它们是为了解决特定问题的代码组合。方...原创 2019-12-23 11:43:53 · 167 阅读 · 0 评论