66个JAVA常见代码大全:学完这篇从Java小白到AI全栈架构师

66个JAVA常见代码大全:学完这篇从Java小白到AI全栈架构师

66个JAVA常见代码大全:学完这篇从Java小白到AI全栈架构师

摘要:本文详细列举了 66 个 Java 编程中的关键代码示例,包括基础语法、数据类型、条件判断、循环、数组、方法、面向对象、继承、接口、抽象类、多态、封装、静态变量、内部类、匿名类、泛型、集合框架、异常处理、文件 I/O、多线程、同步以及高级并发概念,帮助你从入门到成长为架构师。

66个Java常见代码大全:学完这篇从Java小白到AI全栈架构师

引言

在当今的编程世界中,Java 作为一种广泛使用的编程语言,涵盖了从基础语法到复杂架构的方方面面。无论是刚接触编程的新手,还是经验丰富的开发者,掌握Java的核心技术和常用模式,都是成为一名高效开发者的必经之路。本篇文章将带您通过 66 个关键代码示例,从零开始深入学习 Java,从最基础的语法到高阶的并发编程,帮助您成为一名合格的 全栈开发者架构师

这篇文章不仅包含了 Java 编程语言 中的核心概念、常见技术栈,还为您详细解析了 面向对象编程(OOP)与 多线程并发 的实际应用技巧。无论是构建简单的应用程序,还是设计复杂的分布式系统,本文的示例代码将为您提供明确的指导,帮助您快速上手并实现功能。

66个JAVA常见代码大全:学完这篇从Java小白到AI全栈架构师

文章目录


使用说明

  • 环境建议:JDK 17(兼容 11+)、Gradle/Maven 均可。
  • 示例风格:每节给出 1 个小示例,
    • 简短解释 + 可运行/可复用的核心代码;
    • 为避免类名冲突,示例类名各不相同或仅展示片段;
    • 可将多个示例放入同一工程的 src/main/java 目录下单独运行。

如何运行

# 以单文件方式运行 javac Demo01.java &&java Demo01 

1. Hello World

publicclassDemo01{publicstaticvoidmain(String[] args){System.out.println("Hello, World!");}}

2. 变量与类型

publicclassDemo02{publicstaticvoidmain(String[] args){int age =18;double score =98.5;boolean ok =true;char c ='A';long big =9_223_372_036_854_775_807L;// 下划线增强可读性var msg ="Java";// JDK 10 局部类型推断System.out.printf("age=%d, score=%.1f, ok=%b, c=%c, msg=%s\n", age, score, ok, c, msg);}}

3. 类型转换

publicclassDemo03{publicstaticvoidmain(String[] args){int i =10;long l = i;// 自动提升double d = l;int j =(int) d;// 强转可能丢失精度System.out.println(j);}}

4. 常量 final

publicclassDemo04{publicstaticfinaldoublePI=3.141592653589793;publicstaticvoidmain(String[] args){System.out.println(PI);}}

5. 运算符

publicclassDemo05{publicstaticvoidmain(String[] args){int a =5, b =2;System.out.println(a / b);// 2 整除System.out.println(a /(double) b);// 2.5 浮点System.out.println(a++);// 5(先用后加)System.out.println(++a);// 7(先加后用)System.out.println(a &1);// 位运算判断奇偶}}

6. 字符串操作

publicclassDemo06{publicstaticvoidmain(String[] args){String s =" Java ";System.out.println(s.trim().toUpperCase().replace(" ",""));System.out.println(String.join(",","A","B","C"));}}

7. 控制台输入

importjava.util.*;publicclassDemo07{publicstaticvoidmain(String[] args){try(Scanner sc =newScanner(System.in)){System.out.print("请输入名字: ");String name = sc.nextLine();System.out.println("Hi, "+ name);}}}

8. 格式化输出

publicclassDemo08{publicstaticvoidmain(String[] args){System.out.printf("%-10s | %8.2f\n","Revenue",12345.678);}}

9. if-else

publicclassDemo09{publicstaticvoidmain(String[] args){int score =86;String level = score >=90?"A": score >=80?"B":"C";System.out.println(level);}}

10. switch 表达式

publicclassDemo10{publicstaticvoidmain(String[] args){String day ="MON";int num =switch(day){case"MON","TUE","WED","THU","FRI"->1;case"SAT","SUN"->2;default->0;};System.out.println(num);}}

11. for 循环

publicclassDemo11{publicstaticvoidmain(String[] args){int sum =0;for(int i =1; i <=100; i++) sum += i;System.out.println(sum);}}

12. while/do-while

publicclassDemo12{publicstaticvoidmain(String[] args){int n =3;do{System.out.println(n--);}while(n >0);}}

13. break/continue/标签

publicclassDemo13{publicstaticvoidmain(String[] args){ outer:for(int i =0; i <3; i++){for(int j =0; j <3; j++){if(i ==1&& j ==1)break outer;System.out.printf("(%d,%d) ", i, j);}}}}

14. 增强 for

importjava.util.*;publicclassDemo14{publicstaticvoidmain(String[] args){for(var x :List.of(1,2,3))System.out.println(x);}}

15. 一维数组

importjava.util.Arrays;publicclassDemo15{publicstaticvoidmain(String[] args){int[] arr ={3,1,2};Arrays.sort(arr);System.out.println(Arrays.toString(arr));}}

16. 二维数组

importjava.util.Arrays;publicclassDemo16{publicstaticvoidmain(String[] args){int[][] m ={{1,2},{3,4}};System.out.println(Arrays.deepToString(m));}}

17. Arrays 工具类

importjava.util.Arrays;publicclassDemo17{publicstaticvoidmain(String[] args){int[] a ={1,3,5,7};System.out.println(Arrays.binarySearch(a,5));int[] b =Arrays.copyOf(a,6);System.out.println(Arrays.toString(b));}}

18. 方法与重载

publicclassDemo18{staticintadd(int a,int b){return a+b;}staticdoubleadd(double a,double b){return a+b;}publicstaticvoidmain(String[] args){System.out.println(add(1,2));System.out.println(add(1.2,3.4));}}

19. 可变参数

publicclassDemo19{staticintsum(int... xs){int s=0;for(int x:xs) s+=x;return s;}publicstaticvoidmain(String[] a){System.out.println(sum(1,2,3,4));}}

20. 类与对象

classUser{String name;int age;}publicclassDemo20{publicstaticvoidmain(String[] args){User u=newUser(); u.name="Tom"; u.age=20;System.out.println(u.name+":"+u.age);}}

21. 封装

classAccount{privatedouble balance;publicdoublegetBalance(){return balance;}publicvoiddeposit(double amt){if(amt<=0)thrownewIllegalArgumentException(); balance+=amt;}}

22. 构造器与 this

classPoint{int x,y;Point(){this(0,0);}Point(int x,int y){this.x=x;this.y=y;}}

23. static 成员与静态块

classIdGen{staticlong next=1;static{System.out.println("class loaded");}staticsynchronizedlongnextId(){return next++;}}

24. 继承与 super

classAnimal{voidsay(){System.out.println("...");}}classDogextendsAnimal{@Overridevoidsay(){super.say();System.out.println("wang");}}

25. 多态与重写

classShape{doublearea(){return0;}}classCircleextendsShape{double r;Circle(double r){this.r=r;}@Overridedoublearea(){returnMath.PI*r*r;}}classSquareextendsShape{double a;Square(double a){this.a=a;}@Overridedoublearea(){return a*a;}}

26. 抽象类

abstractclassTransport{abstractvoidmove();}classCarextendsTransport{voidmove(){System.out.println("Car go");}}

27. 接口(default/static)

interfaceLogger{voidinfo(String msg);defaultvoidwarn(String msg){System.out.println("WARN "+msg);}staticLoggernop(){return m->{};}}

28. 内部类与匿名类

classOuter{privateint v=42;classInner{intget(){return v;}}// 成员内部类}classUseAnon{staticRunnable r =newRunnable(){publicvoidrun(){System.out.println("anon run");}};}

29. 泛型类

classBox<T>{privateT v;publicvoidset(T v){this.v=v;}publicTget(){return v;}}

30. 泛型方法与通配符(PECS)

importjava.util.*;classG{static<T>voidcopy(List<?superT> dst,List<?extendsT> src){ dst.addAll(src);}// Producer Extends, Consumer Super}

31. 枚举

enumRole{ADMIN,USER,GUEST}

32. ArrayList/LinkedList

importjava.util.*;publicclassDemo32{publicstaticvoidmain(String[] a){List<Integer> arr =newArrayList<>(); arr.add(1); arr.add(2);Deque<Integer> link =newLinkedList<>(); link.addFirst(3); link.addLast(4);System.out.println(arr+" | "+link);}}

33. HashMap/LinkedHashMap/TreeMap

importjava.util.*;publicclassDemo33{publicstaticvoidmain(String[] a){Map<String,Integer> m1=newHashMap<>(); m1.put("b",2); m1.put("a",1);Map<String,Integer> m2=newLinkedHashMap<>(); m2.put("b",2); m2.put("a",1);Map<String,Integer> m3=newTreeMap<>(); m3.put("b",2); m3.put("a",1);System.out.println(m1.keySet());System.out.println(m2.keySet());System.out.println(m3.keySet());}}

34. HashSet/LinkedHashSet/TreeSet

importjava.util.*;publicclassDemo34{publicstaticvoidmain(String[] a){System.out.println(newHashSet<>(List.of(3,1,2)));// 无序System.out.println(newLinkedHashSet<>(List.of(3,1,2)));// 插入序System.out.println(newTreeSet<>(List.of(3,1,2)));// 自然序}}

35. Queue/Deque

importjava.util.*;publicclassDemo35{publicstaticvoidmain(String[] a){Queue<Integer> q =newArrayDeque<>(); q.offer(1); q.offer(2);System.out.println(q.poll());Deque<Integer> d =newArrayDeque<>(); d.addFirst(1); d.addLast(2);System.out.println(d.removeLast());}}

36. Comparable/Comparator

importjava.util.*;classPersonimplementsComparable<Person>{String n;int a;Person(String n,int a){this.n=n;this.a=a;}publicintcompareTo(Person o){returnInteger.compare(a,o.a);}publicStringtoString(){return n+":"+a;}}publicclassDemo36{publicstaticvoidmain(String[] a){List<Person> list =newArrayList<>(List.of(newPerson("A",30),newPerson("B",20))); list.sort(Comparator.comparing(p->p.n));// 使用 ComparatorSystem.out.println(list);}}

37. Stream 基本操作

importjava.util.*;importjava.util.stream.*;publicclassDemo37{publicstaticvoidmain(String[] a){var r =IntStream.rangeClosed(1,10).filter(x->x%2==0).map(x->x*x).boxed().toList();System.out.println(r);}}

38. Optional

importjava.util.*;publicclassDemo38{staticOptional<String>find(boolean ok){return ok?Optional.of("ok"):Optional.empty();}publicstaticvoidmain(String[] a){System.out.println(find(true).orElse("N/A"));}}

39. Collectors 分组/分区

importjava.util.*;importjava.util.stream.*;publicclassDemo39{publicstaticvoidmain(String[] a){recordP(String n,int a){}var ps =List.of(newP("A",18),newP("B",20),newP("C",20));var byAge = ps.stream().collect(Collectors.groupingBy(P::a));var part = ps.stream().collect(Collectors.partitioningBy(p->p.a>=20));System.out.println(byAge);System.out.println(part);}}

40. try-catch-finally & 多重捕获

publicclassDemo40{publicstaticvoidmain(String[] args){try{Integer.parseInt("x");}catch(NumberFormatException|NullPointerException e){System.out.println("bad number");}finally{System.out.println("done");}}}

41. 自定义异常

classBizExceptionextendsRuntimeException{BizException(String m){super(m);}}

42. try-with-resources

importjava.io.*;publicclassDemo42{publicstaticvoidmain(String[] args)throwsException{try(var in =newByteArrayInputStream("hi".getBytes());var out =newByteArrayOutputStream()){ out.write(in.readAllBytes());System.out.println(out);}}}

43. NIO.2 文件读写

importjava.nio.file.*;importjava.nio.charset.StandardCharsets;importjava.io.IOException;publicclassDemo43{publicstaticvoidmain(String[] args)throwsIOException{Path p =Path.of("/tmp/demo.txt");Files.writeString(p,"hello",StandardCharsets.UTF_8);System.out.println(Files.readString(p));}}

44. 对象序列化

importjava.io.*;classBookimplementsSerializable{String name;Book(String n){name=n;}}publicclassDemo44{publicstaticvoidmain(String[] args)throwsException{var f =newFile("/tmp/book.bin");try(var o =newObjectOutputStream(newFileOutputStream(f))){ o.writeObject(newBook("Java"));}try(var i =newObjectInputStream(newFileInputStream(f))){System.out.println(((Book)i.readObject()).name);}}}

45. 缓冲流

importjava.io.*;publicclassDemo45{publicstaticvoidmain(String[] args)throwsException{try(var in =newBufferedInputStream(newFileInputStream("/etc/hosts"))){byte[] buf = in.readAllBytes();System.out.println(buf.length);}}}

46. 目录遍历 Files.walk

importjava.nio.file.*;importjava.io.IOException;publicclassDemo46{publicstaticvoidmain(String[] a)throwsIOException{try(var s =Files.walk(Path.of("."),1)){ s.forEach(System.out::println);}}}

47. 正则表达式

importjava.util.regex.*;publicclassDemo47{publicstaticvoidmain(String[] a){var m =Pattern.compile("(\\w+)@(\\w+\\.\\w+)").matcher("hi [email protected]");if(m.find())System.out.println(m.group(1)+"@"+m.group(2));}}

48. 命令行参数

publicclassDemo48{publicstaticvoidmain(String[] args){for(String s:args)System.out.println(s);}}

49. 创建线程:Thread/Runnable

publicclassDemo49{publicstaticvoidmain(String[] a){newThread(()->System.out.println("hi from "+Thread.currentThread().getName())).start();}}

50. sleep/yield/join

publicclassDemo50{publicstaticvoidmain(String[] a)throwsInterruptedException{Thread t =newThread(()->{try{Thread.sleep(100);}catch(InterruptedException ignored){}}); t.start(); t.join();System.out.println("joined");}}

51. synchronized 同步

classCounter{privateint c;publicsynchronizedvoidinc(){ c++;}publicsynchronizedintget(){return c;}}

52. volatile 可见性演示

publicclassDemo52{staticvolatileboolean running =true;// 保证线程间可见publicstaticvoidmain(String[] a)throwsException{var t =newThread(()->{while(running){}}); t.start();Thread.sleep(10); running =false; t.join();System.out.println("stop");}}

53. 原子类 AtomicInteger

importjava.util.concurrent.atomic.*;classCnt{AtomicInteger n =newAtomicInteger();voidinc(){ n.incrementAndGet();}}

54. ReentrantLock

importjava.util.concurrent.locks.*;classSafeBox{privateint v;privatefinalLock lock=newReentrantLock();voidset(int x){ lock.lock();try{ v=x;}finally{ lock.unlock();}}intget(){ lock.lock();try{return v;}finally{ lock.unlock();}}}

55. ReadWriteLock

importjava.util.concurrent.locks.*;classCacheRW{privateint v;privatefinalReadWriteLock rw =newReentrantReadWriteLock();intget(){ rw.readLock().lock();try{return v;}finally{ rw.readLock().unlock();}}voidset(int x){ rw.writeLock().lock();try{ v=x;}finally{ rw.writeLock().unlock();}}}

56. Condition await/signal

importjava.util.concurrent.locks.*;classWaiter{finalLock lock=newReentrantLock();finalCondition ready=lock.newCondition();boolean ok=false;voidwaitIt()throwsInterruptedException{ lock.lock();try{while(!ok) ready.await();}finally{ lock.unlock();}}voidfire(){ lock.lock();try{ ok=true; ready.signalAll();}finally{ lock.unlock();}}}

57. ThreadLocal

publicclassDemo57{staticThreadLocal<String> ctx =ThreadLocal.withInitial(()->"guest");}

58. BlockingQueue 生产者-消费者

importjava.util.concurrent.*;publicclassDemo58{publicstaticvoidmain(String[] a)throwsException{BlockingQueue<Integer> q =newLinkedBlockingQueue<>(2);newThread(()->{try{for(int i=1;i<=3;i++){ q.put(i);} q.put(-1);}catch(InterruptedException ignored){}}).start();newThread(()->{try{for(;;){int x=q.take();if(x==-1)break;System.out.println("consume "+x);}}catch(InterruptedException ignored){}}).start();}}

59. CountDownLatch

importjava.util.concurrent.*;publicclassDemo59{publicstaticvoidmain(String[] a)throwsException{var latch=newCountDownLatch(3);for(int i=0;i<3;i++)newThread(()->{ latch.countDown();}).start(); latch.await();System.out.println("all done");}}

60. CyclicBarrier

importjava.util.concurrent.*;publicclassDemo60{publicstaticvoidmain(String[] a){var barrier=newCyclicBarrier(3,()->System.out.println("go!"));for(int i=0;i<3;i++)newThread(()->{try{ barrier.await();}catch(Exception ignored){}}).start();}}

61. Semaphore

importjava.util.concurrent.*;publicclassDemo61{publicstaticvoidmain(String[] a){var sem =newSemaphore(2);for(int i=0;i<5;i++)newThread(()->{try{ sem.acquire();System.out.println("in");Thread.sleep(50);}catch(Exception ignored){}finally{ sem.release();}}).start();}}

62. Phaser

importjava.util.concurrent.*;publicclassDemo62{publicstaticvoidmain(String[] a){Phaser p =newPhaser(3);for(int i=0;i<3;i++)newThread(()->{ p.arriveAndAwaitAdvance();System.out.println("phase1"); p.arriveAndDeregister();}).start();}}

63. ExecutorService 线程池

importjava.util.concurrent.*;publicclassDemo63{publicstaticvoidmain(String[] a)throwsException{ExecutorService pool =Executors.newFixedThreadPool(4);Future<Integer> f = pool.submit(()->42);System.out.println(f.get()); pool.shutdown();}}

64. ScheduledExecutorService 定时任务

importjava.util.concurrent.*;publicclassDemo64{publicstaticvoidmain(String[] a){var sch =Executors.newScheduledThreadPool(1); sch.scheduleAtFixedRate(()->System.out.println("tick"),0,1,TimeUnit.SECONDS);}}
提示:示例 64 会持续打印,可在演示时添加退出条件或手动停止进程。

65. CompletableFuture

importjava.util.concurrent.*;publicclassDemo65{publicstaticvoidmain(String[] a)throwsException{var f =CompletableFuture.supplyAsync(()->21).thenApply(x -> x *2);System.out.println(f.get());}}

66. ForkJoinPool

importjava.util.concurrent.*;importjava.util.*;publicclassDemo66{staticclassSumextendsRecursiveTask<Long>{finalint[] arr;finalint lo, hi;staticfinalintTH=1_000;Sum(int[] arr,int lo,int hi){this.arr=arr;this.lo=lo;this.hi=hi;}protectedLongcompute(){if(hi-lo<=TH){long s=0;for(int i=lo;i<hi;i++) s+=arr[i];return s;}int mid=(lo+hi)/2;var left=newSum(arr,lo,mid);var right=newSum(arr,mid,hi); left.fork();long r=right.compute();return left.join()+r;}}publicstaticvoidmain(String[] a){int[] data=newRandom().ints(1_000_000,1,10).toArray();long s =ForkJoinPool.commonPool().invoke(newSum(data,0,data.length));System.out.println(s);}}

进一步学习与架构思维

  • 从“写得通”到“写得稳”:单元测试、异常边界、不可变对象(record / Collections.unmodifiable*)。
  • 从单体到分布式:理解并发原语到线程池隔离,进而到服务化(超时、重试、熔断、限流)的设计理念。
  • 数据与 AI 接口:HTTP 客户端(Java 11+ HttpClient)、JSON 编解码(选择 Jackson/Gson 等库)、向量数据库/消息队列客户端的异步调用,落地到 CompletableFuture 组合编排。
  • 性能与可观测:JFR(Java Flight Recorder)、JIT/GC 基础、指标与日志链路。

基础语法面向对象编程集合与流文件 I/O并发与线程现代并发与编排Web/AI/数据组件全栈/架构Java基本数据类型控制结构类与对象继承与多态抽象类与接口集合框架Stream API文件读取与写入路径与文件操作线程基础同步与锁线程池异步编程Web开发基础AI与机器学习数据分析与处理

结束语

通过本文的详细讲解和丰富示例,我们已经涵盖了 Java 编程中的 66 个关键技术点,并为您提供了从基础到进阶的学习路径。从 基本语法多线程,每个概念都为您奠定了坚实的基础。通过实际代码示例和常见模式的掌握,您将能够轻松应对复杂项目和架构设计。

然而,技术的学习是一个持续的过程。希望本文能够成为您的学习指南,带领您迈向更加专业的编程生涯。接下来,您可以进一步探索 Java 的高级应用,如 分布式系统设计微服务架构、以及 人工智能与大数据处理 等方向。让我们从基础到架构,再到性能优化和高可用设计,逐步提升您的技术能力。

如果您在学习过程中有任何问题,欢迎在评论区留言,或与我互动交流。不断实践,持续成长,未来的全栈架构师之路,已经向您敞开。让我们一起迎接下一个技术高峰!


Read more

【C++】深入浅出“图”——最短路径算法

【C++】深入浅出“图”——最短路径算法

文章目录 * 一、Dijkstra算法 * 二、Bellman_Ford算法 * 三、Floyd_Warshall算法 一、Dijkstra算法 最短路径问题是指,从在带权的有向图中从某一顶点出发,找到通往另一顶点的最短路径,“最短”指的是沿路径各边的权值总和最小。 Dijkstra算法是单源最短路径的经典贪心算法,只能用于没有负权的图。它从起点出发,每次选当前距离最小且未确定最短路径的节点,用它去松弛(更新)所有邻接点的最短路径估计值,标记该节点为 “已确定”,重复此过程直到所有节点处理完毕,最终得到起点到图中所有节点的最短路径。 // src是选定的起点,dist记录起点到各点的最短路径,pPath记录到每个点的最短路径的前驱顶点下标voidDijkstra(const V& src, vector<W>& dist, vector<int>& pPath){ size_t srci =GetVertexIndex(

By Ne0inhk
【Linux】线程池(一)C++ 手写线程池:基于策略模式实现高性能日志模块

【Linux】线程池(一)C++ 手写线程池:基于策略模式实现高性能日志模块

文章目录 * 池化技术 * 线程池的日志模块 * 日志与策略模式 * 日志模块 * 两个核心问题 * 设计文件等级 * 刷新策略 * 获取日志时间 * logger类实现 * 内部类LogMessage实现 * 日志刷新流程图及源码 池化技术 池化技术可以减少很多的底层重复工作,例如创建进程、线程、申请内存空间时的系统调用和初始化工作,例如线程池,先预先创建好一些线程,当任务到来时直接将预先创建好的线程唤醒去处理任务,效率会远远高于任务到来时临时创建线程。例如内存池,但我们要用1mb空间时内存池会一次性申请20mb空间,效率会远远高于用多少空间申请多少空间(申请空间会调用系统调用)。 线程池是执行流级别的池化技术,STL中的空间配置器和内存池是内存块管理级别的池化技术。 线程池的日志模块 下⾯开始,我们结合我们之前所做的所有封装,进⾏⼀个线程池的设计。在写之前,我们要做如下准备。 * 准备线程的封装 * 准备锁和条件变量的封装 * 引⼊日志,对线程进⾏封装 日志与策略

By Ne0inhk
【探寻C++之旅】C++ 智能指针完全指南:从原理到实战,彻底告别内存泄漏

【探寻C++之旅】C++ 智能指针完全指南:从原理到实战,彻底告别内存泄漏

前言 作为 C++ 开发者,你是否曾因以下场景头疼不已?函数中new了数组,却因异常抛出导致后续delete没执行,排查半天定位到内存泄漏;多模块共享一块内存,不知道该由谁负责释放,最后要么重复释放崩溃,要么漏释放泄漏;用了auto_ptr后,拷贝对象导致原对象 “悬空”,访问时直接崩溃却找不到原因。 如果你有过这些经历,那智能指针一定是你必须掌握的现代 C++ 工具。它基于 RAII 思想,自动管理动态资源,让你无需手动delete,从根源上减少内存泄漏风险。今天,我们就从 “为什么需要智能指针” 到 “不同智能指针的实战场景”,带你系统掌握这一核心特性。 请君浏览 * 前言 * 一、智能指针的诞生:解决手动管理内存的 “千古难题” * 1.1 一个典型的内存泄露场景 * 1.2 智能指针的核心:RAII 思想 * 二、C++ 标准库智能指针:

By Ne0inhk
【C++模版】泛型编程:代码复用的终极利器

【C++模版】泛型编程:代码复用的终极利器

目录 一、泛型编程 1.1 为什么需要泛型编程? 1.2 模板:泛型编程的基础 二、函数模板 2.1 函数模板的定义格式 2.2 函数模板的原理 2.3 函数模板的实例化 2.3.1 隐式实例化 2.3.2 显式实例化 2.4 模板参数的匹配原则 ☃. 小彩蛋: 模板中::的二义性问题 三、类模板 3.1 类模板的定义格式 3.2 类模板的实例化 四、非类型模板参数  4.1 核心概念与语法 经典案例:实现编译期定长数组

By Ne0inhk