96SEO 2026-02-19 18:13 9
由解释执行器Java.exe将字节码文件加载到Java虚拟机jvm执行1.3

https://www.cnblogs.com/52py/p/8065066.html
/Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home
进行配置环境变量MAC与Win不一样如果你是第一次配置环境变量可以使用“touch
创建一个.bash_profile的隐藏配置文件(如果你是为编辑已存在的配置文件则使用open
.bash_profile添加以下配置内容JAVA_HOME/Library/Java/JavaVirtualMachines/
/Contents/HomePATH$JAVA_HOME/bin:$PATH:.CLASSPATH$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:.export
标识符(字母、数字、下划线_、美元符$){-不能以数字开头-不用使用关键字或者保留字为标识符1采用驼峰命名法即所有单词的首字母大写
}PS关键字都是小写TRUE、FALSE、NULL不是关键字八种基本数据类型byte1B、short2B、int4B、long8B、float4B、double8B、boolean1B、char2B基本类型
引用数据类型String、数组、类、接口、枚举、Lamda1.5
注意当定义的final变量属于“成员变量”时必须在定义时就设定它的初始值否则将会产生编译错误。
位运算符不会截断A?B一定判断如果相对应位都是1则结果为1否则为0
按位取反运算符翻转操作数的每一位即0变成11变成0带符号按位左移运算符低位补0带符号按位右移运算符正数高位补0负数低位补1。
B逻辑与运算符。
当且仅当两个操作数都为真条件才为真。
若A为falseB不执行若A为trueB执行
B逻辑或操作符。
如果任何两个操作数任何一个为真条件为真。
若A为falseB执行若A为trueB不执行称为逻辑非运算符。
用来反转操作数的逻辑状态。
如果条件为true则逻辑非运算符将得到false。
赋值运算符
运算符该运算符用于操作对象实例检查该对象是否是一个特定类型类类型或接口类型
Java判断语句a、if-else语句if(布尔表达式){//如果布尔表达式的值为true}else{//如果布尔表达式的值为false}b、if-else
{//如果以上布尔表达式都不为true执行代码}c、switch语句expression表达式的类型只能是byte、short、int、char及其包装类Java8之后支持String、enumswitch(expression){case
1.方法的名字的第一个单词应以小写字母作为开头后面的单词则用大写字母开头写不使用连接符。
例如addPerson。
参数像是一个占位符。
当方法被调用时传递值给参数。
这个值被称为实参或变量。
参数列表是指方法的参数类型、顺序和参数的个数。
所有的类直接或者间接继承父类Java认为所有的对象都具备一些基本的共性内容
该类中定义的就是所有对象都具备的功能。
Object的常用方法没有sleep()、synchronized
String(“zhu”);System.out.println(第一个字符串:str1);//字符数组构造char[]
String(charArray);System.out.println(第二个字符串:str2);//字节数组构造byte[]
String(bytearray);System.out.println(第三个字符串:str3);//直接创建String
str4zhu;System.out.println(第四个字符串:str4);
字符串比较System.out.println(str2.equals(str4));//字符串内容比较
10、replace(old,new)替换,用于敏感词替换String
sString.valueOf(number);//String
sInteger.toString(number);//s””
13、将字符串转为整形Integer.parseInt(“123”)Float.parseFloat(“1.23”)1.8.3
该方法用于两个相同数据类型的比较两个不同类型的数据不能用此方法来比较。
Integer
5;System.out.println(x.compareTo(3));
//1System.out.println(x.compareTo(5));
//0//2、equals:判断number对象是否与参数相等。
int
10;System.out.println(x.equals(y));
//false//3、toString:以字符串形式返回值System.out.println(x.toString());
//“5”System.out.println(Integer.toString(12));
//12//4、parseInt、parseDouble:将字符串解析为int
//5.0System.out.println(x1c);//5、0-1随机数System.out.println(Math.random());//6、[0,99]的随机数random.nextInt(100):[1,100]的随机数random.nextInt(100)1://7、[10,20]生成十个制定范围的整数final
numberrandom.nextInt(END-START1)START;System.out.printf(
System.out.println(Math.abs(-1.1));System.out.println(Math.ceil(1.1));System.out.println(Math.floor(-1.1));System.out.println(Math.round(-1.1));
//PS不确定数组元素内容使用动态初始化确定数组元素内容使用静态初始化//一维数组静态初始化指定内容,但数组自动推导数组长度
String[]{abc,aaa};//省略格式:数据类型[]
String[10];//二维数组静态初始化指定内容//标准格式数据类型[][]
数据类型[][]{{1,2,3},{12},{1,3}}int[][]
int[][]{{1,2,3},{12},{1,3}};//省略格式:数据类型[]
arrBB{{1,2,3},{12},{1,3}};//二维数组动态初始化指定长度
数组的优势与局限可以方便的表示大量具有相同数据类型的元素数组一旦创建长度就不能改变不存在动态增加的数组但是有集合可以动态的增加内容3.
elment:array1){System.out.printf(%d
arr{2,4,1,3,43,23};System.out.println(请输入您要查找的数值);Scanner
arr[j];arr[j]arr[j1];arr[j1]temp;}}}for
{System.out.println(element);}}
array{1,4,2,44,23,24};//1、整型数组转为字符串String
sArrays.toString(array);System.out.println(s:s);//2、对数组array进行排序Arrays.sort(array);for
nArrays.binarySearch(array,44);System.out.println(\n
44的下标n);//4、判断两个数组内容、顺序是否一致int[]
barray.equals(array2);System.out.println(array,array2两个数组内容、顺序是否一致:b);3.
/Users/zhupeng/Desktop/Java/DemoCode/基础代码/demo04Class.java
构造方法的作用1、能使一个对象在被创建的时候就完成了所有的初始化的工作。
如果省略构造方法能正确执行Java编译器会自动为该类生成一个默认的构造方法程序在创建对象会自动调用默认的构造方法。
2、本类方法调用构造方法this(),不可以用ClassName()子类方法调用父类构造方法super()3、this、super必须放在方法第一行this、super不能同时使用this、super不能在static方法内调用1.3局部变量和成员变量的作用域问题局部变量的作用域在于下一个”}”出现之前其它方法类或外部无法访问。
成员变量的作用域取决于public(本类方法、外部、包内、继承类可访问)
(本类方法、外部、包内可访问)1.4静态属性、静态方法、静态代码块public
staticMethod(){//方法体}静态属性、静态方法都属于类所以对象共享推荐使用类名.静态属性、类名.静态方法名()进行访问也可以对象.静态属性1.5静态变量与实例变量有什么不同静态变量不需要实例化就可以使用也可以通过实例对象来访问静态变量而实例变量需要实例化才能够使用。
静态方法可以访问本类或其他类的静态方法、静态变量不能访问普通成员方法成员变量成员方法可以访问本类或其他类的静态方法、静态变量可以访问普通成员方法成员变量3.2
Teacher(){//super();默认调用父类构造System.out.println(子类无参构造方法);}public
n){super(n);System.out.println(子类有参构造方法n);}2.2、方法的重写与方法的重载有何不同
1、方法的重写是子类和父类之间的关系是垂直关系方法的重载是同一个类中方法之间的关系是水平关系。
重写只能由一个方法或只能由一对方法产生关系方法的重载是多个方法之间的关系。
4、重写关系中调用那个方法体是根据对象的类型对象对应存储空间类型来决定重载关系是根据调用时的实参表与形参表来选择方法体的。
2.3
3.1什么是多态机制Java语言中是如何实现多态的多态是指一个对象拥有多种状态父类引用指向子类对象(子类对象就当作父类对象)通过指向父类的对象来调用在不同子类中的成员函数接口与此类似
继承extends与接口implements是多态性的前提实现方法
成员方法调用规则若子类对父类方法重写了则调用子类方法父类方法被覆盖若子类没有对父类方法重写则调用父类方法此时obj指向父类不能调用子类独有的方法成员变量调用规则对象名.成员方法(优先子类)同上面成员方法调用规则3.3、对象的向下转型(多态)进行还原调用子类特有方法
抽象类当父类中某个成员函数不能确定其准确的功能且明确的知道子类会调用这些方法时则需要使用抽象类
抽象方法是没有实现方法体的方法而是要保留给抽象类派生出的子类来定义。
2当一个类继承的父类为抽象类的话则需要把抽象类中的所有抽象成员函数全部实现
定义接口的原因当一个类实现一个接口时它必须实现接口中定义的所有方法使用interface来定义一个接口。
接口定义与类的定义相同拥有成员变量和成员方法但是成员变量必须是静态的而且一定要赋初值而且之后不能再修改其成员方法必须是抽象方法。
2.
1、什么是异常简述Java语言的异常处理机制。
异常是指在程序运行中由代码产生的一种错误。
处理机制1.异常
2.1.检查性异常编译异常java.lang.Exception
定义程序正确但因为外在的环境条件不满足引发不是程序本身的逻辑错误而很可能是远程机器名字错误用户拼写错误对于商用软件系统必须考虑这个问题JAVA编译器强制要求处理这类异常如果不捕获这类异常程序将无法编译。
例如,用户错误及I/O问题打开不存在的文件2.2.运行期异常
java.lang.RuntimeException定义程序存在逻辑错误BUG这类异常需要更改程序来避免JAVA编译器要求强制处理这类异常例如数组越界0做除数入参不规范2.3.错误
java.lang.Error定义一般很少见也很难通过程序来解决它可能源于程序的Bug但一般更可能源于环境问题入内存耗尽错误在程序无需处理而由运行环境处理3、异常处理
throw关键字后边new的対象必须是Exception或者Exception的异常对象
throw关键字抛出指定的异常対象,必须处理这个异常throw关键字后边创建的是RuntimeException或者是RuntimeException的子类対象,我可以不处理,默认交给JVM3.2、throws关键字:异常处理的第一种方式交给别人处理
作用:1、当方法内部抛出异常对象的时候,那么我们就必须处理这个异常对象2、可以使用throws关键字处理异常对象会把异常对象声明抛出给方法的调用者处理(自己不处理,给别人处理),最终交给JVM处理--中断处理使用格式:在方法声明时使用
throws关键字后边声明的异常必须是Exception或者是Exception的子类
方法内部如果抛出了多个异常对象,那么throws后边必须也声明多个异常如果抛出的多个异常对象有子父类关系那么直接声明父类异常即可
调用了一个声明抛出异常的方法,我们就必须的处理声明的异常要么继续使用throws声明抛出交给方法的调用者处理,最终交给JVM要么try...catch自己处理异常3.3、try...catch:异常处理的第二种方式,自己处理异常
}catch(异常变量){一般在工作中,会把异常的信息记录到一个日志中
}catch(异常变量){//这个语句块不管有没有异常都会执行//一般用于资源释放
1.try中可能会抛出多个异常対象,那幺就可以使用多个catch来处理异常対象
2.如果try中发生了昇常,那幺就会执行catch中的异常处理逻辑,并继续执行try...catch之后的代码如果try中没有发生了昇常,就不会抉行catch中异常处理逻辑
4关闭CPU4、系统定义的异常与用户自定义的异常有何不同如何使用这两类异常系统定义的异常主要用来处理系统可以预见的较常见的运行时异常对于某个应用程序特有的运行时异常则需要自己创建用户自定义的异常类和异常对象。
5、运行和编译异常区别
Exception:编译期异常写java代码出现出错RuntimeException:运行期异常比较难排出CompilerException编译异常
1基本概念范型的本质是参数化类型也就是说所操作的数据类型被指定为一个参数这种参数可以在类接口和方法的创建中分别称为范型类范型接口范型方法2优点
1.在编译的时候检查类型安全并且所有的强制转换都是自动和隐式的
m[]a.getClass.getDeclareMethods();for(int
System.out.println(m[i].getName());
1、InputStream、OutpuStream、Reader和Writer四个类在功能上在功能上有何异同InputStream和OutputStream类及其子类既可用于处理文本文件也可用于处理二进制文件但主要以处理二进制文件为主。
Reader和Writer类可以用来处理文本文件的读取和写入操作通常是以它们的派生类来创建实体对象再利用它们来处理文本文件读写操作。
2、File类的作用
文件在程序中是以流的形式来操作的3、File类中常用方法的使用介绍
fis.read(bytes))//按字节将fis内容写入数组bytes4、IO流的概念和工作原理
输入流数据从文件向内存流动流向内存FileInputStream
输出流数据从内存向文件流动流出内存FileOutputStream
字节流用于读写二进制文件以及任何类型文件InputStream
对象表示的文件中写入数据的文件输出流。
FileInputStream:文件字节输入流、把硬盘文件中的数据,读取到内存中使用
FileReader:文件字符输入流把硬盘文件中的数据以字符的方式读取到内存中
●进程:是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程
●线程:线程是进程中的一个执行单元负责当前进程中程序的执行,一个进程中至少有一个线程。
一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。
3、Java语言内置了多线程功能支持简化了java多线程编程。
1、新建状态用new关键字和Thread类或其子类创建后该线程处于新建状态。
处于新建状态的线程有自己的内存空间通过调用start方法进入就绪状态runnable
Java.lang.IllegalThreadStateException异常2、就绪状态处于就绪状态的线程已经具备了运行条件等待系统为其分配CPU。
但是等待状态并不是执行状态
PS如果希望子线程调用start()方法后立即执行可以使用Thread.sleep()方式使主线程睡眠一伙儿转去执行子线程。
3、运行状态处于就绪状态的线程如果获得了cpu的调度就会从就绪状态变为运行状态执行run()方法中的任务。
如果该线程失去了cpu资源就会又从运行状态变为就绪状态。
重新等待系统分配资源。
也可以对在运行状态的线程调用yield()方法它就会让出cpu资源再次变为就绪状态。
4、阻塞状态处于运行状态的线程在某些情况下如执行了sleep睡眠方法或等待I/O设备等资源将让出CPU并暂时停止自己的运行进入阻塞状态。
5、死亡状态当线程的run()方法执行完或者被强制性地终止就认为它死去。
这个线程对象也许是活的但是它已经不是一个单独执行的线程。
线程一旦死亡就不能复生。
如果在一个死去的线程上调用start()方法会抛出java.lang.IllegalThreadStateException异常。
7.3
1、sleep()—线程睡眠使当前执行线程暂停工作线程停止但不释放锁以指定毫秒数加上指定的纳秒数以系统定时器和调度器的精度和准确性为准。
sleep是静态方法最好不要用Thread的实例对象调用它。
sleep方法比yield方法有更好的可移植性通常不要依靠yield方法来控制并发线程的执行。
运行阻塞
与sleep()方法有点相似它也是Thread类提供的一个静态的方法使当前正在执行的线程暂停线程停止但不释放锁让同优先级的线程继续执行高风亮节。
但是和sleep()方法不同的是它不会进入到阻塞状态而是进入到就绪状态。
运行就绪
3、join()—线程合并线程的合并的含义就是将几个并行线程的线程合并为一个单线程执行应用场景是当一个线程必须等待另一个线程执行完毕才能执行时释放锁Thread类提供了join方法来完成这个功能注意它不是静态方法。
4、synchronized()—线程同步是同步代码块加锁解锁用的,
同步锁被synchronized修饰的方法或者代码块同一时刻只允许被一个线程访问线程停止但不释放锁
5、volatile—线程同步volatile关键字为域变量的访问提供了一种免锁机制使用volatile修饰域相当于告诉虚拟机该域可能会被其他线程更新。
volatile不会提供任何原子操作它也不能用来修饰final类型的变量。
6、wait()—线程通信线程释放CPU的所有权释放锁并等待直到另一个线程通过调用notify方法或notifyAll方法通知等待此对象的监视器的线程醒来运行阻塞
1、降低资源消耗。
通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
2、提高响应速度。
当任务到达时任务可以不需要等到线程创建就能立即执行。
3、提高线程的可管理性。
线程是稀缺资源如果无限制的创建不仅会消耗系统资源还会降低系统的稳定性使用线程池可以进行统一的分配调优和监控。
比如成员变量成员方法等好处:1.可以在程序运行过程中操作这些对象。
2.可以解耦提高程序的可扩展性。
*获取class对象的方式:1.Class.forName(包名.全类名)
:将字节码文件加载进内存返回class対象多用于配置文件将类名定义在配置文件中读取文件加载类2.类名.class
:通过类名的属性class获取多用于参数的传递3.对象.getclass():
getclass()方法在object类中定义着多用于对象的获取字节码文件
结论同一个字节码文件在一次程序运行过程中只会被加载一次不论通过哪一种
3.忽略访问权限修饰符的安全检查setAccessible(true):暴力反射2.获取构造方法们*
getDeclaredConstructors()Constructor:构造方法
3.忽略访问权限修饰符的安全检查setAccessible(true):暴力反射3.获取成员方法们:*
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback