可能重复:
静态初始化块
请考虑以下代码:
public class Test {
{
System.out.println("Empty block");
}
static {
System.out.println("Static block");
}
public static void main(String[] args) {
Test t = new Test();
}
}
Run Code Online (Sandbox Code Playgroud)
我们知道首先执行静态块,然后执行空块.但问题是我从来没有能够理解空块的实际效用.任何人都可以展示一个真实的例子 -
这不仅仅是一个难题而不是问题.我有以下代码:
public class PrivateBaseConstructor {
public static class BaseClass {
private BaseClass() {
}
}
public static class DerivedClass extends BaseClass {
public DerivedClass() {
super(); // 1*
}
}
}
Run Code Online (Sandbox Code Playgroud)
这里对super();1*的调用是允许的事件,尽管基类构造函数是private.如果我们将类作为单独的类编写在同一个包中:
BClass.java
public class BClass {
private BClass() {
}
}
DClass.java
public class DClass extends BClass {
public DClass() {
super(); // 2*
}
Run Code Online (Sandbox Code Playgroud)
由于基类构造函数不可见,编译器正确地在2*处给出错误.
当两个类在一个类中声明为静态时,为什么编译器不会在我的第一个场景中抛出错误?
我曾参与过一些项目,其中实现更好的性能和减少内存消耗是主要目标。但是相信我,在 Java 中控制内存消耗已经很困难了。
这个wiki 页面上说“ Java 程序速度” ,在某些情况下,Java 在低级和数字基准测试中等同于 C++。
这些统计数据并没有真正显示时间计算性能基准的主要差异。但是,Java 中的内存使用量比 C++ 高得多,因为每个对象有 8 字节的开销,Java 中每个数组有 12 字节的开销(32 位;64 位 java 中的两倍),如中所述以上维基链接。
现在的问题是人们采取了哪些措施来最小化 Java 中的内存使用率?
请注意,我更关心内存而不是性能,因为我想不出比“编写更好的程序”和“在 JDK 中正确调整内存”更好的方法
我遇到了以下情况,无法理解原因,有人可以解释一下吗?
var foo = [0];
console.log(foo == !foo); // true
console.log(foo == foo); // true
Run Code Online (Sandbox Code Playgroud) 我在下面有一个简单的例子
static class Town {
School school;
}
static class School {
List<Subject> subjects;
}
static class Subject{
String name;
}
Run Code Online (Sandbox Code Playgroud)
我想实现一个返回给定城镇的主题名称的方法,该城镇也可以为空
List<String> getSubjectNames(Town town) {
return Optional.ofNullable(town)
.map(town1 -> town1.school)
.map(school -> school.subjects.stream())
.flatMap(subjects -> )
...
}
Run Code Online (Sandbox Code Playgroud)
如何正确地将主流转换为主题以进行地图操作.任何指针将不胜感激.
我已经搜索了stackoverflow中的帖子,我希望这不是重复.
我第一次尝试使用乐观锁定,我能够使用Spring管理的LockModeType,但无法自己定义LockMode
以下是代码示例:
我正在使用以下方法注入持久化上下文:
@PersistenceContext
private EntityManager entityManager;
Run Code Online (Sandbox Code Playgroud)
第一种方法:使用注释交易
@Transactional
public void updateUserProfile(UserProfile userProfile) {
entityManager.lock(userProfile, LockModeType.OPTIMISTIC); // 1*
entityManager.merge(userProfile);
}
Run Code Online (Sandbox Code Playgroud)
例外1: java.lang.IllegalArgumentException: entity not in the persistence context
第二种方法:管理交易
public void updateUserProfile(UserProfile userProfile) {
entityManager.getTransaction().begin(); // 2*
entityManager.lock(userProfile, LockModeType.OPTIMISTIC);
entityManager.merge(userProfile);
entityManager.getTransaction().commit();
}
Run Code Online (Sandbox Code Playgroud)
2的例外情况: Not allowed to create transaction on shared EntityManager - use Spring transactions or EJB CMT instead
第三种方法:由于我使用共享的entityManager获得了异常,我还尝试从entityManagerFactory创建EntityManager.
@Transactional
public void updateUserProfile(UserProfile userProfile) {
EntityManager em = entityManager.getEntityManagerFactory().createEntityManager();
em.getTransaction().begin();
em.lock(userProfile, LockModeType.OPTIMISTIC); // 3*
em.merge(userProfile);
em.getTransaction().commit();
}
Run Code Online (Sandbox Code Playgroud)
3点的例外情况: …
可能重复:
为什么我不能使用单个点访问整数的属性?
我正在阅读一篇文章,并遇到了javascript toFixed方法的奇怪行为.我不明白最后一句话的原因.有人可以解释一下吗?
(42).toFixed(2);//"42.00" 好的
42.toFixed(2); // SyntaxError:标识符在数字文字后立即开始
42..toFixed(2);//"42.00" 这真的很奇怪
java ×5
javascript ×2
comparison ×1
constructor ×1
inheritance ×1
java-8 ×1
java-stream ×1
jpa ×1
lambda ×1
memory ×1
numbers ×1
performance ×1
spring ×1
static-block ×1
superclass ×1
syntax ×1
transactions ×1