如何在Java中获得与平台相关的换行符?我不能"\n"到处使用.
我在工作的技术测试中遇到了这个问题.给出以下代码示例:
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代码,它有一个抽象类,定义了所有方法.然后我想知道,为什么他们把它作为抽象类而不是真正的类呢?他们这样做是为了让我们无法从这个抽象类中实例化吗?或者他们从制作一个定义了所有内容的抽象类中获得了其他好处?
我花了我最初的几个小时与Angular JS,我正在尝试用它写一个SPA.但是,在更改路线时,滚动位置会在更改路线后保持在当前位置.这意味着,如果有人阅读了第二页上的一半文本,则此人将在更改为第二页后的两个页面中间结束.(鉴于页面长度相同.)
当我寻找解决方案时,我只发现人们要求相反,即他们不想在更改页面后更改滚动位置.但是,即便如此,我也未能重现.我想知道Angular JS的发展是否领先于此,我咨询的来源已经过时了.
我创建了一个演示我的问题的最小版本(只需添加两个文件sample1.html并sample2.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) 我刚读完Java虚拟机规范,关于类加载的部分让我感到困惑.据我所知,在阅读规范之后,我认为类的整体实例化按以下顺序组成:
创建/加载:类加载器定位表示类的字节流,可以是文件或网络流,也可以是实现要获取的类加载器的任何类型.如果找不到类,ClassNotFoundException则抛出a.此时,ClassFormatError如果字节数组不表示Java类(例如,缺少幻数)或者UnsupportedClassVersionError正在运行的JVM实例不支持类版本,则已经发生了一些基本验证.
链接:该类被挂钩到JVM中.如果出现问题,LinkageError则抛出一个子类.链接由三个子步骤组成:
验证:确保字节流表示Java类,例如字节代码没有形式错误,例如溢出操作数堆栈的方法字节代码.如果一个类验证失败,VerifyError则抛出一个.
准备:JVM为所有静态字段分配内存,并可能创建实例模板以加速实例创建.创建虚拟方法表.在此阶段不会抛出类加载特定错误.(OutOfMemoryError虽然可能会抛出.)
解决方案:现在以运行时常量池的形式加载到方法区域中的所有符号引用都将解析为此JVM加载的实际类型.如果可以解析符号引用但导致定义冲突,IncompatibleClassChangeError则抛出a.如果找不到引用的类,NoClassDefFoundError则抛出a ClassNotFoundException,它基本上包装了类加载器尝试加载此引用类所引发的类.如果引用的类引用自身,ClassCircularityError则抛出a.解决方案可以以两种方式之一发生,这取决于JVM的实现者
渴望:现在解决对其他字段,方法或类的所有符号引用.
懒惰:将符号引用的解析推迟到第一次使用方法时.这可能会带来一个引用不存在的类的类永远不会抛出错误,如果这个引用永远不需要解决.
初始化:运行在类static中定义为Java代码的类的初始化程序.如果这样的初始化程序引起异常,则会重新包含此异常ExceptionInInitializerError.
令我困惑的是上述类加载机制的解析阶段.为什么分辨率被定义为链接中的明确步骤,具体在准备之后发生?已经在类加载阶段的描述中,提到了
如果C具有任何直接超接口,则使用§5.4.3.1的算法解析从C到其直接超接口的符号引用.
验证发生后,符号引用是否也未得到解决,因为描述了验证:
验证(第4.10节)确保类或接口的二进制表示在结构上是正确的(第4.9节).验证可能会导致加载其他类和接口(第5.3节),但不需要对它们进行验证或准备.
我总是记住这张照片

资料来源:http://www.programcreek.com
我几乎在任何解释课程加载的地方都看到过.如果分辨率不情愿被看作是所有阶段的一部分,全面负责创建/加载,验证, …
我试图使用AOP框架创建一个对象,该框架使用CGLIB来创建代理对象.奇怪的是,"增强型"代理对象没有上一课所有的任何注释!
任何人都可以告诉我如何让CGLIB保留其创建的代理上的注释?
干杯! Nirav
假设我在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 将不会首先写入此属性?
我正在用一个定义带注释的接收器类型的方法来查看一个相当简单的类:
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.
我想知道实际使用的不安全性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)
我的考虑是:
sun.misc.Unsafe被认为是Java 9中公共API的一部分sun.misc.Unsafe从那时起,许多非Oracle虚拟机也会提供- 我猜 - 有很多库已经使用它了.这也使得这个班级不太可能消失我仍然想知道:还有其他原因我不应该使用sun.misc.Unsafe我没有想到的吗?如果你谷歌这个问题,人们宁愿回答一个未指定,因为它不安全,但我真的不觉得除了(非常不可能)该方法将有一天从Oracle VM消失的可能性.
我实际上需要创建一个对象而不需要调用构造函数来克服Java的类型系统.我不考虑sun.misc.Unsafe对性能的原因.
附加信息:我ReflectionFactory在示例中使用的是方便的,Unsafe …
java ×9
angularjs ×1
annotations ×1
casting ×1
cglib ×1
classloader ×1
concurrency ×1
eol ×1
inheritance ×1
java-8 ×1
java-api ×1
jvm ×1
newline ×1
patch ×1
receiver ×1
routes ×1
spring ×1
swingx ×1
volatile ×1