第一行代码java相关知识
-
JVM学习第一篇思考:一个Java代码是怎么运行起来的-上篇JVM学习第一篇思考:一个Java代码是怎么运行起来的-上篇作为一个使用Java语言开发的程序员,我们都知道,要想运行Java程序至少需要安装JRE(安装JDK也没问题)。我们也知道我们Java程序员编写的程序代码文件是*.java的,而JRE运行的是*.class的文件。所以,我们需要将java文件编译成class文件然后才可以。那么,你有没有想过,一个java文件是怎么运行起来的呢?中间都经历了哪些环节呢?我们都知道JVM是Java虚拟机,那么,有没有思考过JVM的内存模型是什么呢?我们new出来的对象,声明不同类型的变量又是存放在JVM哪个位置呢?本文是凯哥(凯哥Java:kaigejava)学习JVM系列教程第一篇。欢迎大家一起学习本文目标:通过本文学习后,希望大家对JVM类加载过程有个了解。编辑上面程序很简单。那么,有没有想过上面代码怎么运行的呢?选中main方法,然后ruan as...,编译后,运行输出。这个流程我想大家都很熟悉的。那么对应的流程应该是什么样的呢?如下图:编辑在Run的时候,先
-
Java代码执行顺序阅读原文:Java代码执行顺序 程序中代码执行的顺序非常重要,稍有不慎便会是程序运行出错,那么我将结合实例来分析代码中的执行。 名词解释 首先了解几个名词: 非静态代码块 直接由 { } 包起来的代码,称为非静态代码块 静态代码块 直接由 static { } 包起来的代码,称为静态代码块 形参 比如你定义一个函数void add(int a, int b),这里的a和b就是形参。 当你进行函数调用的时候,add(1, 2),这里的1和2就是实参。 向前引用 所谓向前引用,就是在定义类、接口、方
-
JVM学习第二篇思考:一个Java代码是怎么运行起来的-下篇JVM学习第二篇思考:一个Java代码是怎么运行起来的-下篇在上一篇《JVM学习第一篇思考:一个Java代码是怎么运行起来的-上篇》中咱们知道类一个Java类的生命周期需要经历以下七个阶段:类加载、验证、准备、解析、初始化、使用、卸载。同时,我们对每个阶段都做了简单介绍。于是我们就得到了如下的:今日目标:jvm在什么时候会去加载一个类?类加载器和双亲委派机制是什么?上一篇问题思路解析jvm在什么时候会去加载一个类?我们既然知道了一个Java类的生命周期。那么一个类在什么时候被加载呢?类加载的时机是什么?什么是主动引用?什么是被动引用呢?在Java的虚拟机规范中,没有对加载阶段作出明确约束。但是在初始化阶段,Java虚拟机严格规定了有且只有在以下几种情况下,类必须立即进行初始化的(注意初始化阶段在类生命周期中哪个阶段)1.1:使用new关键字实例化对象的时候当我们使用new关键字来创建(实例化)对象的时候,读取和设置类的静态的变量(static int = 1;)、静态非字面值常量(静态字面值常量除外。如:s
-
夯实Java基础系列7:一文读懂Java 代码块和执行顺序目录 Java中的构造方法 构造方法简介 构造方法实例 例 1 例 2 Java中的几种构造方法详解 普通构造方法 默认构造方法 重载构造方法 java子类构造方法调用父类构造方法 Java中的代码块简介 Java代码块使用 局部代码块 构造代码块 静态代码块 Java代码块、构造方法(包含继承关系)的执行顺序 参考文章 微信公众号 Java技术江湖 个人公众号:黄小斜 本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-T
第一行代码java相关课程
第一行代码java相关教程
- 4.JAVA 代码实现 在说明求解钢条切割问题的整个过程之后,接下来,我们看看如何用 java 代码实现钢条切割问题的求解。import java.util.ArrayList;import java.util.List;public class ActivitySelect { public static void main(String args[]){ //活动集合a int a[] = {1,2,3,4,5,6,7,8,9,10,11}; //活动开始时间集合s int s[] ={1,3,0,5,3,5,6,8,8,2,12}; //活动结束集合f int f[] ={4,5,6,7,9,9,10,11,12,14,16}; //活动选择存放集合A List<Integer> A = new ArrayList<>(); int n = s.length; A.add(a[0]); int k =0; //遍历选择活动 for (int i=1; i<n; i++){ if(s[i] >= f[k]){ A.add(a[i]); k = i; } } System.out.println("活动选择问题的选择活动结果为:"); System.out.println(A); }}运行结果如下:活动选择问题的选择活动结果为:[1, 4, 8, 11]代码中第 7 行至第 14 行分别初始化活动和对应的开始时间、结束时间以及活动选择过程中存放选择的活动集合,代码的第 16 至 18 行对应着开始的活动选择初始化工作,因为 java 数组的下标从 0 开始,所以这里面我们第一个选择的活动为 a [0],而不是伪代码中的 a [1]。代码的第 20 行至 26 行 for 循环遍历活动选择,按照贪心选择的方法选择对应的活动,放入最终的结果集 A 中 ,代码的 28 行 29 行输出相关的活动选择结果。
- 4. Java 代码实现 在说明希尔排序的整个过程之后,接下来,我们看看如何用 Java 代码实现希尔排序算法。import java.util.Arrays;public class ShellSort { public static void main(String[] args) { //初始化需要排序的数组 int array[] = {9, 2, 11, 7, 12, 5}; //初始化希尔排序的增量为数组长度 int gap = array.length; //不断地进行插入排序,直至增量为1 while (true) { //增量每次减半 gap = gap/2; for (int i = 0; i < gap; i++) { //内部循环是一个插入排序 for (int j = i + gap; j < array.length; j += gap) { int temp = array[j]; int k = j - gap; while (k >= 0 && array[k] > temp) { array[k + gap] = array[k]; k -= gap; } array[k + gap] = temp; } } //增量为1之后,希尔排序结束,退出循环 if (gap == 1) break; } //打印出排序好的序列 System.out.println(Arrays.toString(array)); }}运行结果如下:[2, 5, 7, 9, 11, 12]代码中的第 8 行初始化一个需要排序的数组,后面按照从小到大的排序规则,实现了数组的排序。第 12 行至 30 行是整个希尔排序的流程。第 14 行代码表示希尔排序中的增量每次整除 2 取得,第 17 行至 25 行是一个 for 循环结构,表明按照增量进行插入排序。最后第 32 行代码输出排序好的数组。
- 4. Java 代码实现 在说明冒泡排序的整个过程之后,接下来,我们看看如何用 Java 代码实现冒泡排序算法。import java.util.Arrays;public class BubbleSort { public static void main(String[] args) { //初始化需要排序的数组 int array[] = {9,2,11,7,12,5}; //对需要排序的数组进行排序 for (int i=1; i<array.length; i++){ //针对待排序序列中除了已经排序好的元素之外,重复排序工作 for(int j=0;j<array.length-i;j++){ //当相邻两个元素需要交换时,交换相邻的两个元素 if(array[j]>array[j+1]){ int temp = array[j]; array[j] = array[j+1]; array[j+1] = temp; } } } //打印出排序好的序列 System.out.println(Arrays.toString(array)); }}运行结果如下:[2, 5, 7, 9, 11, 12]代码中的第 8 行初始化一个需要排序的数组,后面按照从小到大的排序规则,实现了数组的排序。第 11 行是外层循环,不断地重复排序工作。第 14 行是内层循环,不断地实现每一次 “冒泡” ,将最大的一个元素找出。第 17 至第 21 行实现当相邻两个元素需要交换时,交换相邻的两个元素的功能。第 25 行打印出排序好的数组。
- 4. Java 代码实现 在说明选择排序的整个过程之后,接下来,我们看看如何用 Java 代码实现选择排序算法。import java.util.Arrays;public class SelectSort { public static void main(String[] args) { //初始化需要排序的数组 int array[] = {9, 2, 11, 7, 12, 5}; //依次进行选择排序,每次找出最小的元素,放入待排序的序列中 for(int i=0;i<array.length;i++){ //记录最小元素min和最小元素的数组下标索引minIndex int min = array[i]; int minIndex = i; //在未排序的序列中找出最小的元素和对应数组中的位置 for(int j=i+1;j<array.length;j++){ if(array[j] < min){ min = array[j]; minIndex = j; } } //交换位置 int temp = array[i]; array[i] = array[minIndex]; array[minIndex] = temp; } //打印出排序好的序列 System.out.println(Arrays.toString(array)); }}运行结果如下:[2, 5, 7, 9, 11, 12]代码中的第 7 行初始化一个需要排序的数组,后面按照从小到大的排序规则,实现了数组的排序。第 10 行是外层 for 循环,不断地重复选择排序工作。第 17 行是内层循环,不断地实现每一次 “选择 “,在未排序的序列中找出最小的元素和对应数组中的位置。第 24 至第 27 行实现了将未排序好的序列中的最小元素与需要排序的位置的元素进行交换的功能。第 31 行打印出排序好的数组。
- 4.JAVA 代码实现 在说明求解背包问题的整个过程之后,接下来,我们看看如何用 java 代码实现背包问题的求解。import java.util.ArrayList;import java.util.Collections;import java.util.List;public class Knapsack { /** * 物品内部类 */ private static class Item implements Comparable<Item>{ int type; double weight; double value; double unitValue; public Item(int type, double weight){ this.type = type; this.weight = weight; } public Item(int type, double weight,double value){ this.type = type; this.weight = weight; this.value = value; this.unitValue = value/weight; } @Override public int compareTo(Item o) { return Double.valueOf(o.unitValue).compareTo(this.unitValue); } } public static void main(String[] args){ //背包容量 double capacity = 30; //物品类型初始化数组 int[] itemType = {1,2,3,4,5}; //物品重量初始化数组 double[] itemWeight = {10,5,15,10,30}; //物品价值初始化数组 double[] itemValue = {20,30,15,25,10}; //初始化物品 List<Item> itemList = new ArrayList<>(); for(int i=0;i<itemType.length;i++){ Item item = new Item(itemType[i],itemWeight[i],itemValue[i]); itemList.add(item); } //物品按照单价降序排序 Collections.sort(itemList); //背包选择 List<Item> selectItemList = new ArrayList<>(); double selectCapacity = 0; for(Item item : itemList){ if( (selectCapacity + item.weight) <= capacity){ selectCapacity = selectCapacity + item.weight; Item selectItem = new Item(item.type,item.weight); selectItemList.add(selectItem); }else { Item selectItem = new Item(item.type, capacity-selectCapacity); selectItemList.add(selectItem); break; } } //选择结果输出 for (Item item : selectItemList){ System.out.println("选择了类型:"+ item.type+" 的物品,重量为:"+item.weight); } }}运行结果如下:选择了类型:2 的物品,重量为:5.0选择了类型:4 的物品,重量为:10.0选择了类型:1 的物品,重量为:10.0选择了类型:3 的物品,重量为:5.0代码中第 10 行至第 31 行定义了物品的一个内部类,用来存储一个物品的类型、重量、价值、单位重量的价值,并且实现在其中实现了一个对比函数。代码的第 35 至 42 行对应着开始的背包问题的初始化工作,分别初始化了背包容量、物品类型、物品重量、物品价值。代码的第 44 行至 51 行将所有物品按照物品内部类的格式加入数组,并且按照物品单位重量的价值进行降序排序。代码的第 53 行至第 66 行,按照背包问题的贪心选择方法选择对应的物品,并记录选择的物品类型及重量,放入到选择的物品列表中 ,代码的 69 行 71 行输出相关的物品选择结果。
- 4.JAVA 代码实现 在说明求解钢条切割问题的整个过程之后,接下来,我们看看如何用 java 代码实现钢条切割问题的求解。import java.util.Scanner;public class SteelBarCutProblem { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int[] p = {0,1,5,8,9,10,17,17,20,24,30}; int[] r = new int[p.length]; int[] s = new int[p.length]; System.out.println("请输入1到"+ (p.length-1)+"之间任意一个自然数: "); int n = scanner.nextInt(); r[0] = 0; for(int i =1; i<=n; i++){ int q = Integer.MIN_VALUE; for (int j=1; j<=i; j++){ if(q < (p[j] + r[i-j])){ q = p[j] + r[i-j]; s[i] = j; } } r[i] = q; } System.out.println("长度为"+ n +"米长的钢材最大切割收益为:"+r[n]); System.out.println("对应的具体每一段的切割长度如下:"); while (n>0){ System.out.println(s[n]); n = n - s[n]; } }运行结果如下:请输入1到10之间任意一个自然数: 8长度为8米长的钢材最大切割收益为:22对应的具体每一段的切割长度如下:26运行结果中首先需要输入一个自然数表示要切割的钢条的长度,然后对应输出该长度钢条切割之后的最大化收益以及具体的切割方法。代码中第 8 行至第 10 行分别初始化对应长度的钢材的价格表,对应长度钢条切割之后的最大化收益数组,对应长度钢条满足最大化收益时第一次切割的长度。代码的第 15 行至第 25 行主要来实现步骤 4 中的 ExtendCutSteelRod 算法,用来计算最大化的切割收益及保存解,代码的 27 行至 32 行主要是对求解结果的输出。并且代码中引用了 Scanner 类用来进行交换处理,可以在控制台输入一段需要切割的钢条长度,然后返回对应的切割结果。
第一行代码java相关搜索
-
daima
damain
dart
dataset
datasource
datediff
datediff函数
datepicker
datetime
db4o
dbi
dcloud
deallocate
debian安装
debugger
debugging
declaration
declarations
declare
decode函数