我正在尝试处理我的应用程序中的异常.我正在尝试记录异常,然后使用Toast提醒用户存在问题.我在我的所有类中都有这个工作查找扩展Activity.
但是,在任何没有扩展活动的类中,我都无法使用toast方法,因为我无法获取当前上下文.有没有一种简单的方法来解决这个问题,还是我的班级应该扩展活动?
您好我想知道如何将变量作为参数发送到方法并让方法更改它.例如
public class Main {
public static void main(String[] args) {
int i = 2;
doThis(i);
System.out.println(i);
}
public static void doThis(int i) {
i = 3;
}
}
Run Code Online (Sandbox Code Playgroud)
我想打印出3而不是2.谢谢.
我知道Java总是按值传递,但我不明白为什么这样可行:
public static void swap(int[] arr, int i, int j)
{
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
public static void main(String[] args)
{
int[] arr = {3, 4, 5, 6};
swap(arr, 1, 3);
// arr becomes {3, 6, 5, 4}
}
Run Code Online (Sandbox Code Playgroud)
这不起作用:
public static void swap(int[] arr, int[] arr2)
{
int[] tmp = arr;
arr = arr2;
arr2 = tmp;
}
public static void main(String[] args)
{
int[] arr = {3, 4, 5, 6};
int[] …Run Code Online (Sandbox Code Playgroud) 我不明白为什么System.out.println(name)输出Sam而不受方法的concat函数的影响,而System.out.println(names)输出Sam4作为方法的append方法的结果.为什么StringBuilder受影响而不是String?通常,在对对象的引用上调用方法会影响调用者,所以我不明白为什么String结果保持不变.提前致谢
public static String speak(String name) {
name = name.concat("4");
return name;
}
public static StringBuilder test(StringBuilder names) {
names = names.append("4");
return names;
}
public static void main(String[] args) {
String name = "Sam";
speak(name);
System.out.println(name); //Sam
StringBuilder names = new StringBuilder("Sam");
test(names);
System.out.println(names); //Sam4
}
Run Code Online (Sandbox Code Playgroud) 初学java问题,但我无法理解在下面的例子中,call-by-Value(或Reference)是如何工作的 -
为什么在我的自定义String对象退出方法后,String值不会被修改.?与Date等其他类相同
public class StringMadness {
public static void main(String[] args) {
String s = "Native String";
CustomStringObject cs = new CustomStringObject();
System.out.println("Custom String Before: " + cs.str);
hello(cs);
System.out.println("Custom String After: " + cs.str);
System.out.println("Native String Before: " + s);
hello(s);
System.out.println("Native String After: " + s);
}
private static void hello(String t) {
t = "hello " + t;
}
private static void hello(CustomStringObject o) {
o.str = "hello " + o.str;
}
}
class CustomStringObject { …Run Code Online (Sandbox Code Playgroud) 我在我的应用程序中实现了一个Loader来查询数据库中的数据.我通过实现LoaderCallbacks<Cursor>监听器来监听发生的变化.我遇到的问题是当onLoaderReset(Loader<Cursor> loader)我的数据发生变化时使用该方法,并且我想要使与加载器相关的任何数据无效并释放.在所有示例中,在此方法中有以下调用:
mAdapter.swapCursor(null);
但问题是我不使用适配器中光标的数据,我在我的应用程序中以其他方式使用它.
(onLoadFinished(Loader<Cursor> loader, Cursor data)例如,直接从返回的游标中)
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
if (data.moveToFirst()) {
TOTAL_CARDS = data.getCount();
mView.createCards(TOTAL_CARDS);
} else {
TOTAL_CARDS = 0;
mView.createCards(TOTAL_CARDS);
}
}
Run Code Online (Sandbox Code Playgroud)
这里要做的相应事情是什么,与...类似mAdapter.swapCursor.我对装载机没有多少经验,事实上我刚开始与他们合作,所以如果有人有解决方案,我会很感激.谢谢!
编辑:现在,我传递null到加载器,它的工作原理如下:
@Override
public void onLoaderReset(Loader<Cursor> loader) {
loader = null;
}
};
Run Code Online (Sandbox Code Playgroud)
但这是正确的解决方案吗?
在课堂上,我有:
private Foo bar;
public Constructor(Foo bar)
{
this.bar = bar;
}
Run Code Online (Sandbox Code Playgroud)
而不是从参数中提供的对象创建bar的副本,是否可以在构造函数中包含指向bar的指针,以便更改原始栏会更改此对象中的字段?
另一种方式:
int x = 7;
int y = x;
x = 9;
System.out.print(y); //Prints 7.
Run Code Online (Sandbox Code Playgroud)
可以将其设置为打印y打印9而不是7?
我想在Java中使用引用,但我不知道如何!例如在C++中我们写道:
void sum(int& x)
{
...
}
Run Code Online (Sandbox Code Playgroud)
但在Java和sign中是一个编译器错误!请帮我理解Java中的参考资料.
我在Android上有以下Kotlin类:
class ThisApplication: Application() {
lateinit var network: INetwork
override fun onCreate() {
super.onCreate()
network = Network()
}
}
Run Code Online (Sandbox Code Playgroud)
现在,任何外部类都可以通过简单地执行以下操作来获取INetwork参考:
application.network
Run Code Online (Sandbox Code Playgroud)
但是,这也使外部类可以覆盖该值:
application.network = myNewNetworkReference
Run Code Online (Sandbox Code Playgroud)
我想避免第二种选择.不幸的是,我无法创建该字段,val因为它的初始化需要在onCreate回调中发生.
我还考虑过将字段设为私有并通过函数公开它,如下所示:
private lateinit var network: INetwork
fun getNetwork() = network
Run Code Online (Sandbox Code Playgroud)
但是,无论谁调用getNetwork()仍然可以为其分配一个新值,如下所示:
application.getNetwork() = myNewNetworkReference
Run Code Online (Sandbox Code Playgroud)
如何使网络字段成为外部类的只读?或者甚至更好,val即使我无法在构造函数中初始化它,有没有办法实现它?