小编Raf*_*ter的帖子

如何获得与平台相关的新行字符?

如何在Java中获得与平台相关的换行符?我不能"\n"到处使用.

java cross-platform newline eol

531
推荐指数
8
解决办法
42万
查看次数

为什么'(int)(char)(byte)-2'在Java中产生65534?

我在工作的技术测试中遇到了这个问题.给出以下代码示例:

public class Manager {
    public static void main (String args[]) {
        System.out.println((int) (char) (byte) -2);
    }
}
Run Code Online (Sandbox Code Playgroud)

它输出为65534.

此行为仅显示负值; 0和正数产生相同的值,即在SOP中输入的值.这里输入的字节无关紧要; 我试过没有它.

所以我的问题是:到底发生了什么?

java casting

69
推荐指数
4
解决办法
5294
查看次数

是否有任何理由要在类中定义每个方法的抽象类?

似乎抽象类意味着类的定义不完整,因此无法实例化.

我看到了一些简单的Java代码,它有一个抽象类,定义了所有方法.然后我想知道,为什么他们把它作为抽象类而不是真正的类呢?他们这样做是为了让我们无法从这个抽象类中实例化吗?或者他们从制作一个定义了所有内容的抽象类中获得了其他好处?

java inheritance

33
推荐指数
4
解决办法
2758
查看次数

如何重置路线更改时的滚动位置?

我花了我最初的几个小时与Angular JS,我正在尝试用它写一个SPA.但是,在更改路线时,滚动位置会在更改路线后保持在当前位置.这意味着,如果有人阅读了第二页上的一半文本,则此人将在更改为第二页后的两个页面中间结束.(鉴于页面长度相同.)

当我寻找解决方案时,我只发现人们要求相反,即他们不想在更改页面后更改滚动位置.但是,即便如此,我也未能重现.我想知道Angular JS的发展是否领先于此,我咨询的来源已经过时了.

我创建了一个演示我的问题的最小版本(只需添加两个文件sample1.htmlsample2.html使用随机内容使其工作.):

<!DOCTYPE html>
<html>
<head lang="en"><title>SPA sample</title></head>
<body data-ng-app="myApp">
<div style="position: fixed;">
  <a href="#/">Main</a>
  <a href="#/other">Tutorial</a>
</div>
<div data-ng-view=""></div>
<script src="http://code.angularjs.org/1.2.9/angular.min.js"></script>
<script src="http://code.angularjs.org/1.2.9/angular-route.min.js"></script>
<script>
    var myApp = angular.module('myApp', ['ngRoute']);
    myApp.config(function ($routeProvider) {
        $routeProvider
                .when('/', {
                    controller: 'noOp',
                    templateUrl: 'sample1.html'
                })
                .when('/other', {
                    controller: 'noOp',
                    templateUrl: 'sample2.html'
                })
                .otherwise({redirectTo: '/'});
    });
    myApp.controller('noOp', function ($scope) { });
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

routes angularjs

22
推荐指数
2
解决办法
1万
查看次数

Java类加载的解析阶段实际上从哪里开始?

我刚读完Java虚拟机规范,关于类加载部分让我感到困惑.据我所知,在阅读规范之后,我认为类的整体实例化按以下顺序组成:

  • 创建/加载:类加载器定位表示类的字节流,可以是文件或网络流,也可以是实现要获取的类加载器的任何类型.如果找不到类,ClassNotFoundException则抛出a.此时,ClassFormatError如果字节数组不表示Java类(例如,缺少幻数)或者UnsupportedClassVersionError正在运行的JVM实例不支持类版本,则已经发生了一些基本验证.

  • 链接:该类被挂钩到JVM中.如果出现问题,LinkageError则抛出一个子类.链接由三个子步骤组成:

    • 验证:确保字节流表示Java类,例如字节代码没有形式错误,例如溢出操作数堆栈的方法字节代码.如果一个类验证失败,VerifyError则抛出一个.

    • 准备:JVM为所有静态字段分配内存,并可能创建实例模板以加速实例创建.创建虚拟方法表.在此阶段不会抛出类加载特定错误.(OutOfMemoryError虽然可能会抛出.)

    • 解决方案:现在以运行时常量池的形式加载到方法区域中的所有符号引用都将解析为此JVM加载的实际类型.如果可以解析符号引用但导致定义冲突,IncompatibleClassChangeError则抛出a.如果找不到引用的类,NoClassDefFoundError则抛出a ClassNotFoundException,它基本上包装了类加载器尝试加载此引用类所引发的类.如果引用的类引用自身,ClassCircularityError则抛出a.解决方案可以以两种方式之一发生,这取决于JVM的实现者

      1. 渴望:现在解决对其他字段,方法或类的所有符号引用.

      2. 懒惰:将符号引用的解析推迟到第一次使用方法时.这可能会带来一个引用不存在的类的类永远不会抛出错误,如果这个引用永远不需要解决.

  • 初始化:运行在类static中定义为Java代码的类的初始化程序.如果这样的初始化程序引起异常,则会重新包含此异常ExceptionInInitializerError.

令我困惑的是上述类加载机制的解析阶段.为什么分辨率被定义为链接中的明确步骤,具体在准备之后发生?已经在加载阶段描述中,提到了

如果C具有任何直接超接口,则使用§5.4.3.1的算法解析从C到其直接超接口的符号引用.

验证发生后,符号引用是否也未得到解决,因为描述了验证:

验证(第4.10节)确保类或接口的二进制表示在结构上是正确的(第4.9节).验证可能会导致加载其他类和接口(第5.3节),但不需要对它们进行验证或准备.

我总是记住这张照片

Java类加载概述

资料来源:http://www.programcreek.com

我几乎在任何解释课程加载的地方都看到过.如果分辨率不情愿被看作是所有阶段的一部分,全面负责创建/加载,验证, …

java jvm classloader

20
推荐指数
1
解决办法
2540
查看次数

用自定义版本替换Java类库中的类

BasicLabelUI的javax /秋千/ PLAF /基本是通过影响已确认的bug.在我的应用程序中,我需要固定版本提供的功能(为v9提交).由于法律和技术原因,我仍然受限于受影响的JDK版本.

我的方法是在我的项目中创建一个包javax/swing/plaf/basic,包含固定版本.

如何强制我的项目支持我在已安装的JDK中的缺陷类上包含的类的版本?

这必须具有一定的便携性,因为固定类也必须在客户端工作,并且必须忽略JDK安装中的缺陷类.因此,我不想修改JDK,而是绕过这个特定的类.

java patch swingx

20
推荐指数
1
解决办法
7562
查看次数

保留CGLIB代理上的注释?

我试图使用AOP框架创建一个对象,该框架使用CGLIB来创建代理对象.奇怪的是,"增强型"代理对象没有上一课所有的任何注释!

任何人都可以告诉我如何让CGLIB保留其创建的代理上的注释?

干杯! Nirav

java annotations cglib

18
推荐指数
2
解决办法
5590
查看次数

如果我在Spring Framework中的@PostConstruct中初始化它们,我应该将对象属性标记为volatile吗?

假设我在Spring单例bean中做了一些初始化@PostConstruct(简化代码):

@Service
class SomeService {
  public Data someData; // not final, not volatile

  public SomeService() { }

  @PostConstruct
  public void init() {
     someData = new Data(....);
  }
}
Run Code Online (Sandbox Code Playgroud)

我应该担心someData其他豆类的可见性并标记它volatile吗?

(假设我无法在构造函数中初始化它)

第二种情况:如果我覆盖了@PostConstruct(例如在构造函数中进行显式初始化或初始化之后),那么写入@PostConstruct 将不会首先写入此属性?

java concurrency spring volatile

18
推荐指数
2
解决办法
5035
查看次数

如何访问接收器类型参数的类型注释

我正在用一个定义带注释的接收器类型的方法来查看一个相当简单的类:

class Foo<T> { 
  void foo(Foo<@Bar T> this) {}
}
Run Code Online (Sandbox Code Playgroud)

我现在想访问接收器类型参数的类型注释,@Bar但Java反射API在访问接收器时返回带注释的原始类型:

assert Foo.class.getDeclaredMethod("foo")
                .getAnnotatedReceiverType() 
  instanceof AnnotatedParameterizedType;
Run Code Online (Sandbox Code Playgroud)

断言失败,因为返回的带注释的类型作为原始类型返回Foo.这是故意的吗?@Bar当访问AnnotatedType返回的实现的私有属性时,我仍然可以找到注释.

我正在运行最新版本的Java 8.

java receiver java-8 type-annotation

17
推荐指数
2
解决办法
567
查看次数

实际使用sun.misc.Unsafe有多安全?

我想知道实际使用的不安全性sun.misc.Unsafe.我想创建一个对象的代理,我拦截每个方法调用(但Object.finalize出于性能考虑而去的那个).为此,我用谷歌搜索了一下,并提出了以下代码片段:

class MyClass {
  private final String value;
  MyClass() {
    this.value = "called";
  }
  public void print() {
    System.out.println(value);
  }
}

@org.junit.Test
public void testConstructorTrespassing() throws Exception {
  @SuppressWarnings("unchecked")
  Constructor<MyClass> constructor = ReflectionFactory.getReflectionFactory()
      .newConstructorForSerialization(MyClass.class, Object.class.getConstructor());
  constructor.setAccessible(true);
  assertNull(constructor.newInstance().print());
}
Run Code Online (Sandbox Code Playgroud)

我的考虑是:

  • 尽管Java被宣传为Write一次,但在任何地方都可以运行,因为开发人员看起来就像写一次,在可控制的客户的运行时环境中运行一次
  • sun.misc.Unsafe认为是Java 9中公共API的一部分
  • sun.misc.Unsafe从那时起,许多非Oracle虚拟机也会提供- 我猜 - 有很多库已经使用它了.这也使得这个班级不太可能消失
  • 我永远不会在Android上运行该应用程序,所以这对我来说无关紧要.
  • 有多少人实际上正在使用非Oracle VM?

我仍然想知道:还有其他原因我不应该使用sun.misc.Unsafe我没有想到的吗?如果你谷歌这个问题,人们宁愿回答一个未指定,因为它不安全,但我真的不觉得除了(非常不可能)该方法将有一天从Oracle VM消失的可能性.

我实际上需要创建一个对象而不需要调用构造函数来克服Java的类型系统.我不考虑sun.misc.Unsafe性能的原因.

附加信息:我ReflectionFactory在示例中使用的是方便的,Unsafe …

java java-api

16
推荐指数
1
解决办法
2148
查看次数