java 为啥使用continue会使程序错误
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 为啥使用continue会使程序错误相关的知识,希望对你有一定的参考价值。
public class Test
public static void main(String[] args)
int b = 1000;
while(true)
if(b < 9)
continue;//改成break;就不会报错
b = b-9;
System.out.println(b);
Test.java:13: 错误: 无法访问的语句
System.out.println(b);
^
1 个错误
while(true)这之后的语句执行不到,所以报错无法访问。
这就跟你在return之后的代码一样,都返回了后面的代码能执行到么,抛错和这个一样,编译根本不能通过。
区别在哪呢?代码稍做改动就看出来了,将while(true)改成while(b<10000),同样是死循环,但是编译和运行都不会报错,这是因为我写的是一个表达式而你写的是常量,对于变量的值编译器是没有办法获取的,运行的时候才会分配内存,但是常量编译的时候就已经在内存中的方法区分配了空间,所以你编译不能通过但是我能通过。 参考技术A 你使用continue不就死循环了,continue是跳过循环后面的语句,b的值不变,继续下一次循环 下一次还是执行continue b的值还是不变,一直continue,一直b的值不变 死循环了。追问
死循环并没有语法问题,那为什么会报错。新手刚学。
追答是没有语法问题 因为while是死循环了 后面的System.out.println(b);就执行不到了
应该是编译器检查过严 这不算语法问题。
你上面写的代码里,如果是continue的话会形成无限循环,也就是死循环。 参考技术C 你没发现是死循环吗?追问
那为什么会报错
追答最常见的就是,内存溢出
追问可给出的错误是 :无法访问的语句
参考技术D 不会,应该是你的程序出了问题了为啥这个 xamarin Binding Converter 会使应用程序崩溃?
【中文标题】为啥这个 xamarin Binding Converter 会使应用程序崩溃?【英文标题】:Why this xamarin Binding Converter crashs the application?为什么这个 xamarin Binding Converter 会使应用程序崩溃? 【发布时间】:2020-08-30 02:57:19 【问题描述】:我有一个布尔属性,我想将其否定值(!值)绑定到一个按钮,但是每次我在 xaml 标记中配置转换器时,它都会毫无例外地终止应用程序,我在应用程序中心没有发现任何错误.如果我删除这部分 , Converter=StaticResource inverter
一切都会恢复,但没有转换。
我的xml:
<ContentPage.Resources>
<local:BooleanConverter x:Key="inverter" />
...
<ContentPage.Resources>
...
<controls:FrameButton IsEnabled="Binding IsBusy, Converter=StaticResource inverter" Margin="5" CornerRadius="5">
还有我的 BooleanConverter.cs:
using System;
using Xamarin.Forms;
public class BooleanConverter : IValueConverter
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
return !System.Convert.ToBoolean(value);
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
return !System.Convert.ToBoolean(value);
更新 1
框架按钮代码:
using Xamarin.Forms;
namespace CustomControls.Controls
public class FrameButton : Frame
public FrameButton()
var MyTapGesture = new TapGestureRecognizer();
MyTapGesture.Tapped += (sender, e) => Clicked(); ;
GestureRecognizers.Add(MyTapGesture);
public async void Clicked()
await this.ScaleTo(1.1, 100);
await this.ScaleTo(1, 100);
【问题讨论】:
尝试添加 try/catch,和/或使用调试器单步执行代码并跟踪错误 我使用您提供的代码进行测试,以设置按钮的布尔值。它运作良好。我们需要更多信息来重现。你能为此提供FrameButton
吗?您是否尝试卸载并重新安装该应用程序或在其他设备上进行测试?应用程序是否再次崩溃?
@Jason 已尝试 Convert(..) try catch 但没有输出任何内容
@WendyZang-MSFT 是的,我尝试在两个不同的设备中清理解决方案、重建和测试。我现在会用 FrameButton 更新我的问题
@ÉderRochaBezerra 我制作了代码示例以使用 FrameButton 进行测试。它运作良好。你可以从 GitHub 下载查看。 github.com/WendyZang/Test/tree/master/Converters/inverterDemo
【参考方案1】:
使用显式转换,因为您总是知道value
将是一个布尔值,除非您使用错误。一般不使用ConvertBack
,因为它通常没有意义。
using System;
using Xamarin.Forms;
public class BooleanConverter : IValueConverter
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
return !((bool)value);
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
throw new NotImplementedException();
【讨论】:
我试过你的代码,但问题仍然存在......完全相同的问题。 你能发布一个堆栈跟踪吗?还是输出窗口信息? 我能找到的唯一信息是:[libc] Fatal signal 11 (SIGSEGV), code 2, fault addr 0x794bb2bce8 in tid 26734 (com.MyApp.Beta)
通常,如果您在输出窗格中继续向上滚动,您将能够找到实际的异常或至少提及您的代码位置。
在开始这个有问题的页面并仔细阅读之前,我正在清理所有内容,但没有别的了。【参考方案2】:
也许是因为它试图将 IsEnabled 值转换回来。
您是否尝试过使其成为OneWay
例如
IsEnabled="Binding IsBusy, Mode=OneWay, Converter=x:StaticResource BooleanConverter"
编辑考虑您的评论。
我认为 SEGSEGV 错误是内存分段错误,即内存读取错误。所以可能没有找到inverter
。
我发现其中一些深奥的错误消息通常是由 XAML 代码中的错误触发的。
我看到您对该页面的转换器声明是:
<ContentPage.Resources>
<local:BooleanConverter x:Key="inverter" />
...
<ContentPage.Resources>
通常声明是:
<ContentPage.Resources>
<ResourceDictionary>
<local:BooleanConverter x:Key="inverter" />
...
</ResourceDictionary>
<ContentPage.Resources>
我怀疑与被调用键“inverter”的关系没有声明,因为它不在ResourceDictionary
中
【讨论】:
我很有希望,但没有...同样的问题 =(以上是关于java 为啥使用continue会使程序错误的主要内容,如果未能解决你的问题,请参考以下文章
为啥在 C 中使用错误的格式说明符会使我的程序在 Windows 7 上崩溃?
为啥 GHUnit 的异步测试中的错误断言会使应用程序崩溃,而不仅仅是测试失败?