所以我最近一直在考虑一些自动内存管理的想法 - 具体来说,我一直在寻找基于引用计数实现内存管理器.当然,每个人都知道循环引用会杀死天真的引用计数.解决方案:弱引用.就个人而言,我讨厌以这种方式使用弱引用(还有其他更直观的方法来解决这个问题,通过循环检测),但它让我思考:弱引用还有什么用处?
我认为它们必然存在某种原因,特别是在具有跟踪垃圾收集的语言中,它们不会受到循环参考陷阱的影响(C#和Java是我熟悉的,Java甚至有三种弱引用!).但是,当我试图为他们找到一些可靠的用例时,我几乎只有像"使用它们来实现缓存"这样的想法(我已经在SO上看过几次).我也不喜欢它,因为它们依赖于跟踪GC在不再强烈引用之后可能不会立即收集对象的事实,除非在低内存情况下.这些类型的情况对于引用计数GC是完全无效的,因为对象在不再被引用之后立即被销毁(除了可能在循环的情况下).
但这真让我感到疑惑:弱引用怎么可能有用呢?如果你不能指望它引用一个对象,并且它不需要像打破周期那样,那么为什么要使用它?
请考虑以下代码行:
public static void main(String[] args) {
foo(1,2,3);
System.out.println("-------------------------------------");
foo(new Integer(1), new Integer(2), new Integer(3));
System.out.println("-------------------------------------");
foo(new Integer[]{1,2,3});
System.out.println("-------------------------------------");
foo(new Integer[] {new Integer(1), new Integer(2), new Integer(3)});
}
public static void foo(Object... bar) {
System.out.println("bar instanceof Integer[]:\t" + (bar instanceof Integer[]));
System.out.println("bar[0] instanceof Integer:\t" + (bar[0] instanceof Integer));
System.out.println("bar.getClass().isArray():\t" + bar.getClass().isArray());
}
Run Code Online (Sandbox Code Playgroud)
此代码段的输出是:
bar instanceof Integer[]: false
bar[0] instanceof Integer: true
bar.getClass().isArray(): true
-------------------------------------
bar instanceof Integer[]: false
bar[0] instanceof Integer: true
bar.getClass().isArray(): true
-------------------------------------
bar instanceof Integer[]: true
bar[0] …Run Code Online (Sandbox Code Playgroud) 我目前有一个原生的iOS GUI和一个Qt-GUI.我正试图从一个切换到另一个.
要明确:当我点击本机GUI上的按钮时,我希望Qt-GUI显示,反之亦然.
我已经找到了我必须添加哪些库才能使用Qt-Stuff.我QApplication在AppDelegate.mm文件中创建了一个:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *) launchOptions {
// receive int argc, and char** argv for the QApplication.
_qApp = new QApplication(_argc, _argv);
}
Run Code Online (Sandbox Code Playgroud)
此外,我的Qt应用程序看起来(此刻)像这样:
void createQtGUI() {
QPushButton* btn = new QPushButton("Some Button");
QLabel* lbl = new QLabel("QTGui");
QVBoxLayout* layout = new QVBoxLayout();
layout->addWidget(lbl);
layout->addWidget(btn);
QWidget* window = new QWidget();
window->setLayout(layout);
window->show();
}
Run Code Online (Sandbox Code Playgroud)
createQtGUI我ViewController.mm在按下原生iOS GUI中的按钮时调用我的方法.代码运行时不会抛出任何错误,但是:
Qt-GUI未显示.应用程序仍然显示本机gui而不切换到Qt-GUI.
有谁知道如何解决这个问题?
我想使用Retrofit将视频文件(从图库中选择)上传到服务器.但它不起作用并抛出异常" java.lang.IllegalArgumentException:unexpected url:192.168.1.7 ".我的代码如下所示.
PostFile.java:
public final class PostFile {
public static final MediaType MEDIA_TYPE_MARKDOWN
= MediaType.parse("vide/mp4");
private final OkHttpClient client = new OkHttpClient();
public void run(String path) throws Exception {
File file = new File(path);
Request request = new Request.Builder()
.url("192.168.1.7/")
.post(RequestBody.create(MEDIA_TYPE_MARKDOWN, file))
.build();
Response response = client.newCall(request).execute();
if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
System.out.println(response.body().string());
}
}
Run Code Online (Sandbox Code Playgroud)
PostFile:
public class MainActivity extends Activity {
private static int RESULT_LOAD_IMG = 1;
String decodableString;
@Override
protected …Run Code Online (Sandbox Code Playgroud) 我有一个关于静态块的问题:
假设我的班级看起来像这样:
class SomeClass {
static {
System.out.println("static block");
}
}
Run Code Online (Sandbox Code Playgroud)
我在SomeClass某处定义了一个类型的变量.
public static void main(String args[]) {
SomeClass foo;
}
Run Code Online (Sandbox Code Playgroud)
现在我认为静态块将被执行,但事实并非如此.据我所知,只要类加载器加载SomeClass类,就会执行静态块.现在我真正的问题:
一旦我定义了该类型的变量,是不是加载了类?.如果是,为什么不执行静态块?
如果答案应该是no,那么我怎么知道类加载器是否已经加载了类以及加载类的不同可能性(我知道2:初始化变量并使用静态字段/方法)
public class NumFormatTest
{
public static void main(String[] args) throws ParseException
{
String num = "1 201";
DecimalFormat df = (DecimalFormat) NumberFormat.getNumberInstance(Locale.FRANCE);
System.out.println("Number Before parse: "+num);
double dm = df.parse(num).doubleValue();
System.out.println("Number After parse: "+dm);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
Number Before parse: 1 201
Number After parse: 1.0
Run Code Online (Sandbox Code Playgroud)
预期产出:
Number Before parse: 1 201
Number After parse: **1201**
Run Code Online (Sandbox Code Playgroud)
可以请任何帮助我理解为什么解析不能将FRENCH语言环境格式化字符串(1 201)转换为普通双值(1201.0)?
我需要定义一个平面POJO,将其(平面)属性映射到其JSON规范中的嵌套对象。用代码更好地解释
{
"offset": 0,
"pageSize": 10,
"filter": {
"key1":"value1",
"key2": true,
....
}
}
Run Code Online (Sandbox Code Playgroud)
我的POJO如下所示:
public class Pojo {
private int offset;
private int pageSize;
private String key1;
private boolean key2;
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我曾尝试注释那些key具有属性@JsonProperty,其value属性
@JsonProperty("filter.key1")
private String key1;
Run Code Online (Sandbox Code Playgroud)
但是,当我进入MVC控制器时,尽管这些属性是在JSON中设置的,但它们在解码的POJO中为空。
我怎样才能解决这个问题?我做错什么了?
我绝对不想创建嵌套的子类
我很确定我完全理解只有一个递归的方法是如何工作的。
Ex) 计算阶乘
public int factorial(int n){ //factorial recursion
if(n==0){
return 1;
}
else{
return n*factorial(n-1);
}
}
Run Code Online (Sandbox Code Playgroud)
对于这些方法,我什至可以想象堆栈中发生了什么以及在每个堆栈级别返回了什么值。
但是每当我遇到双重递归的方法时,噩梦就开始了。
下面是来自编码蝙蝠的双重递归的递归问题。
例如)给定一个整数数组,是否可以选择一组整数,使得该组和给定的目标相加?如果是,则为真。如果没有,则为假。您使用 3 个参数;起始索引start,一个 int Array nums,目标 int 值目标。
下面是这个问题的解决方案。
public boolean groupSum(int start, int[] nums, int target) {
if (start >= nums.length) return (target == 0);
if (groupSum(start + 1, nums, target - nums[start])) return true;
if (groupSum(start + 1, nums, target)) return true;
return false;
}
Run Code Online (Sandbox Code Playgroud)
我对这个解决方案的理解是这样的。假设我得到了一个数组 {2,4,8},起始索引 = 0,目标值为 10。所以 …
我不敢相信我发现这个有多麻烦:
我想用 NSLog()
我该怎么做#import以及我链接到哪个库?
提前致谢,
松鸦
我只是在玩java并想在用户做一个简单的程序; 我必须猜测/输入正确的数字,直到它正确为止.我能做什么,程序可以继续运行,打印出"再猜一猜",直到用户/我输入正确的数字.也许布尔值?我不确定.这就是我到目前为止所拥有的.
import java.util.Scanner;
public class iftothemax {
public static void main(String[] args) {
int myInt = 2;
// Create Scanner object
Scanner input = new Scanner(System.in);
//Output the prompt
System.out.println("Enter a number:");
//Wait for the user to enter a number
int value = input.nextInt();
if(value == myInt) {
System.out.println("You discover me!");
}
else {
//Tell them to keep guessing
System.out.println("Not yet! You entered:" + value + " Make another guess");
input.nextInt();
}
}
Run Code Online (Sandbox Code Playgroud) java ×7
android ×1
autoboxing ×1
boolean ×1
c++ ×1
eclipse ×1
if-statement ×1
ios ×1
iphone ×1
json ×1
nslog ×1
objective-c ×1
qt ×1
recursion ×1
retrofit ×1
static-block ×1
upload ×1