
️ 上回说到刘前端将灵脉类型尽数参悟数据之道初窥门径。然而云师兄临去时留下玄机一语——“你以为private就是最强的封印错权限之道远比你想象的更精微……”此言如暮鼓晨钟刘前端心神一凛当即入定参悟。一夜辗转灵识不安。天明时分云师兄已立于洞府之外袖中玉简泛着微光。 一、天道法则——Java修饰符云师兄将玉简展开万千符文流转如星河“今日讲天道法则——修饰符。此乃仙门规制决定灵力可见、可改、可承之权。修仙者若不明天道法则灵力外泄、秘术暴露必遭反噬。”1. 访问修饰符——四重权限之境“Java仙门立四重权限由广至狭层层收束。”刘前端心中暗想在凡界前端哪有什么访问修饰符变量要么全局可见要么函数内藏模块化也全靠约定。Java仙门的权限管控精细得如同一座森严的宗门。修饰符同类同包子类不同包修仙喻意public✅✅✅✅天下皆见大道公传protected✅✅✅❌宗门传承血脉可承默认(缺省)✅✅❌❌同门可见不传外宗private✅❌❌❌秘传心印唯己可知publicclassCultivator{publicStringname;// 天下皆见——灵名公开protectedintlevel;// 宗门传承——同包及子类可访Stringsect;// 同门可见——默认权限不写修饰符privateStringsecretArt;// 秘传心印——仅自身可访privatevoidinnerRefine(){// 秘传心印——外界不可调用System.out.println(内观自在);}}⚠️ 易错点默认权限不写任何修饰符不是default关键字很多初修者误写default int level;此乃大谬——default在Java中另有其用switch的默认分支、接口默认方法绝非访问修饰符。2. 非访问修饰符——天道封印与虚影蓝图云师兄拂袖三道灵光浮现“除了访问权限天道另有三种重要法则——”static——上节已讲灵气归于类本身不随个体生灭。简要回顾静态变量为所有实例共享静态方法无this引用可直接通过类名调用。final——天道封印不可改、不可继、不可覆。一旦封印便是天规。publicclassHeavenLaw{publicstaticfinalintMAX_LEVEL100;// 组合天下皆见的封印常量finalintluck88;// 封印实例变量——每个对象各有一份但不可改finalvoidultimateArt(){// 封印方法——子类不可覆写System.out.println(此法不可改写);}}// final class AncientGod { } // 封印类——不可被继承abstract——虚影蓝图只立规矩不施实行待后来者补全。abstractclassSpiritBeast{abstractvoidroar();// 虚影蓝图——只有声明没有方法体voidbreathe(){// 抽象类中也可以有普通方法System.out.println(灵兽吐纳);}}classFireLionextendsSpiritBeast{Overridevoidroar(){// 子类必须实现所有抽象方法System.out.println(烈焰咆哮);}}synchronized——独占法阵同一时刻仅允许一条灵脉进入关键区域防止灵力冲突。此法涉及并发修炼后续篇章详解。3. 修饰符组合规则 修行小贴士修饰符可组合使用但有天道禁忌——public static final——常见组合定义全局常量如Math.PIabstract 与 final 不可共存——虚影待实现 vs 封印不可改自相矛盾abstract 与 private 不可共存——私秘不可见子类如何实现虚影abstract 与 static 不可共存——静态归于类无实例何以多态 二、灵数秘典——Number类云师兄一拂袖案上浮现八枚玉符各自散发不同灵光“基本灵数虽轻灵迅捷却非对象。凡入集合之阵、泛型之域须将其封入法器——此即包装类基本类型与引用类型之间的渡化之桥。”刘前端暗想JS里数字就是对象可以随便调方法。Java却把基本类型和对象分得泾渭分明包装类就是连接两界的桥梁……1. 八灵封印——包装类对应表基本类型包装类灵数喻意byteByte微灵shortShort短灵intInteger整灵longLong长灵floatFloat浮灵doubleDouble精灵charCharacter符灵booleanBoolean判灵 修行小贴士注意两个特例——int对应Integer而非Intchar对应Character而非Char其余都是首字母大写即可。2. 装箱与拆箱——灵气封入与释放// 装箱散灵封入法器基本类型 → 包装类IntegerboxedInteger.valueOf(42);// 显式装箱——手动封入IntegerautoBoxed42;// 自动装箱(Autoboxing)——编译器代劳// 拆箱法器释放灵气包装类 → 基本类型intunboxedboxed.intValue();// 显式拆箱——手动释放intautoUnboxedautoBoxed;// 自动拆箱(Unboxing)——编译器代劳⚠️ 易错点自动拆箱时若包装类为null会抛出NullPointerException——空法器中无灵气可释放强行拆箱必遭反噬3. Number常用方法IntegernumInteger.valueOf(108);// 字符串转Integerintinum.intValue();// 转为intdoublednum.doubleValue();// 转为doubleintparsedInteger.parseInt(999);// 字符串直接转int常用doubleparsedDDouble.parseDouble(3.14);// 字符串直接转doubleStringbinStrInteger.toBinaryString(10);// 1010——转二进制StringhexStrInteger.toHexString(255);// ff——转十六进制4. ⚠️ Integer缓存池——灵数秘境Integera127;Integerb127;System.out.println(ab);// true——缓存池内同一法器Integerc128;Integerd128;System.out.println(cd);// false——超出缓存池各造新器System.out.println(c.equals(d));// true——内容相同⚠️ 易错点Integer缓存池范围为 -128~127此范围内比较为true超出则各新建对象为false判断包装类是否相等务必用.equals()而非。这是无数修行者栽过的坑。 三、天算神推——Math类“天算殿中有一部神推之法无需实例化直接以类名召唤——此即Math。”Math类特点构造方法私有private Math()凡人不可创建其对象——天算殿不可踏入只能远处请法所有方法均为static类名直接调用即可// 天算神推诸法Math.abs(-42);// 42——取绝对之力Math.ceil(3.2);// 4.0——升仙向上取整Math.floor(3.8);// 3.0——坠凡向下取整Math.round(3.5);// 4——四舍五入返回longMath.round(3.4);// 3Math.max(10,20);// 20——取两者之大Math.min(10,20);// 10——取两者之小Math.pow(2,10);// 1024.0——幂运算2的10次方Math.sqrt(144);// 12.0——开方Math.random();// 0.0~1.0之间随机数——造化无常刘前端暗暗点头这些方法JS的Math也有倒是相通的。不过Java的类型更严格ceil和floor返回的是double而非int。生成指定范围随机数// 公式(int)(Math.random() * (max - min 1)) min// 例生成1~100的随机整数intfate(int)(Math.random()*100)1;// 生成50~80的随机整数intreward(int)(Math.random()*31)50; 修行小贴士StrictMath与Math用法一致但StrictMath保证跨平台结果完全相同采用严格数学库实现Math允许各平台自行优化、结果可能有微小差异。一般修行用Math即可需要严格跨平台一致性时用StrictMath。 四、符文真经——String类云师兄展开一卷泛黄经书经文上符文流转不息“此乃符文真经——String。看似简单实为修行路上最常踩的坑。”1. String的本质——已刻经文不可篡改刘前端大惊在JS里字符串虽然也是不可变的但拼接起来随手就来从来不用操心。Java这里竟然把不可变做到了极致——final类、final数组、常量池复用……String是final类不可被继承底层是final char[] JDK9后为final byte[]一旦赋值内容不可更改字符串常量池相同字面量复用同一对象天书阁复用机制节省灵力Strings1道;// 字面量——入常量池Strings2道;// 常量池中复用s1的引用Strings3newString(道);// 堆内存新建对象不入常量池System.out.println(s1s2);// true——同一法器System.out.println(s1s3);// false——不同法器System.out.println(s1.equals(s3));// true——内容相同⚠️ 易错点字符串比较内容必须用.equals()比较的是引用地址这是Java修行者最常见的入坑之处没有之一。2. String常用方法Stringart Java仙门 ;art.length();// 10——符文长度含空格art.charAt(2);// J——取指定位置符文索引从0起art.substring(2,6);// Java——截取子串[2,6)左闭右开art.indexOf(仙);// 6——查找位置未找到返回-1art.contains(仙门);// true——是否包含art.trim();// Java仙门——去除首尾空白art.replace(仙门,宗门);// 替换所有匹配art.split(仙);// 按仙拆分为字符串数组art.toUpperCase();// 转大写art.toLowerCase();// 转小写art.isEmpty();// false——是否为空串 修行小贴士substring的参数是左闭右开[begin, end)这是Java中区间操作的统一惯例。3. StringBuilder与StringBuffer——可改写的草稿卷不可变的String每次修改都新建对象频繁拼接时效率极低。StringBuilder与StringBuffer是可变字符串如同可反复改写的草稿卷StringBuildersbnewStringBuilder(道);sb.append(法);// 道法——追加sb.insert(1,之);// 道之法——插入sb.delete(1,2);// 道法——删除[1,2)sb.reverse();// 法道——反转sb.replace(0,1,天);// 天法——替换[0,1)Stringresultsb.toString();// 转回String// 链式调用new StringBuilder().append(道).append(法).toString()对比StringStringBuilderStringBuffer可变性不可变可变可变线程安全安全(不可变即安全)不安全安全(synchronized护法)性能拼接慢(每次新建)最快略慢于Builder修仙喻已刻经文草稿卷有护法的草稿卷 修行小贴士单线程场景用StringBuilder更快多线程共享用StringBuffer有synchronized护法保安全。日常修行99%用Builder。Java编译器会将拼接String自动优化为StringBuilder但循环中的仍会反复创建对象务必手动用Builder。4. StringJoiner——符文缝合术importjava.util.StringJoiner;StringJoinersjnewStringJoiner(-,[,]);// 分隔符、前缀、后缀sj.add(道).add(法).add(术);System.out.println(sj.toString());// [道-法-术] 五、单符秘法——Character类“灵数有封装单一符灵亦有——Character乃char之包装法器。”Characterch道;// 自动装箱Character.isDigit(5);// true——是否为数字符灵Character.isLetter(道);// true——是否为字母符灵Character.isLetterOrDigit(A);// true——是否为字母或数字Character.isUpperCase(A);// true——是否大写Character.isLowerCase(a);// true——是否小写Character.toUpperCase(a);// A——转大写Character.toLowerCase(A);// a——转小写charcch;// 自动拆箱 修行小贴士Character同样有缓存池0~127判断相等也请用.equals()。在实际修行中Character常用于字符串遍历时的字符判断配合String的.toCharArray()使用。 六、道纪时历——日期时间云师兄翻开最后一卷上面墨迹斑驳新旧交替“时间修仙者最难参悟之物。Java仙门历经两纪——旧法残缺新法方为正道。”1. 旧法残卷已过时了解即可// 上古残卷——Date大多方法已废弃DateoldDatenewDate();// 精确到毫秒intyearoldDate.getYear();// 返回年份-1900坑SimpleDateFormatsdfnewSimpleDateFormat(yyyy-MM-dd HH:mm:ss);Stringformattedsdf.format(oldDate);// 格式化SimpleDateFormat非线程安全// 上古残卷——Calendar月份从0起算CalendarcalCalendar.getInstance();cal.set(2026,5,21);// 实际是2026年6月21日——月份要1坑刘前端苦笑JS的Date月份也从0开始这两位老前辈真是一个模子刻出来的……不过Java已经推倒重来了JS还在修修补补。2. 新法正道——java.time包JDK8importjava.time.*;// 纪年——LocalDate只有年月日LocalDatedateLocalDate.now();// 当前日期LocalDatefoundedLocalDate.of(2024,1,1);// 指定日期date.getYear();// 2026date.getMonthValue();// 5——月份终于从1开始了date.getDayOfMonth();// 21date.plusDays(7);// 7天后返回新对象date.minusMonths(1);// 1个月前返回新对象// 时辰——LocalTime只有时分秒纳秒LocalTimetimeLocalTime.now();// 当前时间LocalTimedawnLocalTime.of(6,0,0);// 指定时间time.getHour();// 时辰// 纪年时辰——LocalDateTime日期时间LocalDateTimenowLocalDateTime.now();// 当前日期时间LocalDateTimebattleLocalDateTime.of(2026,5,21,12,0);3. 格式化与解析——DateTimeFormatterimportjava.time.format.DateTimeFormatter;DateTimeFormatterfmtDateTimeFormatter.ofPattern(yyyy年MM月dd日 HH:mm:ss);Stringtextnow.format(fmt);// 格式化输出LocalDateTimeparsedLocalDateTime.parse(2026年05月21日 12:00:00,fmt);// 解析 修行小贴士DateTimeFormatter是线程安全的替代了旧法中非线程安全的SimpleDateFormat多人共修无忧。4. Duration与Period——灵力持续与修行周期// Duration——灵力持续精确到时、分、秒、纳秒DurationdurationDuration.between(dawn,time);duration.toHours();// 持续几时辰duration.toMinutes();// 持续几分钟// Period——修行周期以年、月、日为单位PeriodperiodPeriod.between(founded,date);period.getYears();// 修行几年period.getMonths();// 几月period.getDays();// 几日5. Instant——天地刹那InstantinstantInstant.now();// UTC时间线上的瞬时点纳秒精度instant.toEpochMilli();// 转毫秒时间戳——可与旧法Date互转instant.getEpochSecond();// 转秒级时间戳⚠️ 易错点LocalDate、LocalTime、LocalDateTime、Instant都是不可变的所有修改操作plus、minus、with都返回新对象不会改变原值。这与String的不可变理念一脉相承是Java仙门的设计哲学。 本节修炼总结模块修仙喻名核心要点修饰符天道法则public/protected/默认/private四重权限final封印/abstract虚影/synchronized独占组合禁忌Number类灵数秘典8种包装类、自动装箱拆箱、Integer缓存池(-128~127)、equals判断相等Math类天算神推私有构造全静态、abs/ceil/floor/round/random/pow/sqrt、随机范围公式String类符文真经不可变final类、常量池复用、equals非、StringBuilder可变高效、Buffer线程安全Character类单符秘法单字符包装类、isDigit/isLetter/大小写判断与转换、缓存池日期时间道纪时历弃Date/Calendar、用java.time新法、不可变设计、Duration/Period/Instant 刘前端合上玉简长舒一口气。天道法则纷繁灵数封印精妙符文经卷深邃道纪时历玄奥——这一节信息量之大令他识海几欲撑裂。然而他隐隐感觉到这些不过是筑基之物真正的劫难尚未到来。云师兄临走时忽然回头目光深邃“修行路上意外无处不在——灵力溢出、法阵越界、空灵坠落……你可知道Java仙门如何应对这些劫数”刘前端心中一凛“劫数……”⚡ 下一节《劫数归途——异常处理与集合初窥》