Herbert Schildt在他关于Java的书中提到过,
@Inherited是一个标记注释,只能用于另一个注释声明.此外,它仅影响将在类声明上使用的注释.@Inherited导致超类的注释被子类继承.因此,当为一个特定的注释的请求到子类制成,如果该注释中不存在的子类,那么它的超类被检查.如果该注释存在于超类中,并且如果注释了
@Inherited该注释,则将返回该注释.
我很清楚注释不是继承的.例外是注释,其声明用注释标注@Inherited.
我已经明白了注释的其余部分,其中包括java.lang.annotation中:@Retention,@Documented,和@Target.和其他三@Override,@Deprecated和@SuppressWarnings.
在@Inherited注释方面我有点困惑.有人可以通过一个简单的foobar示例演示它吗?
其次,在StackOverflow上经历一个关于此的问题,我遇到了这个,
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD) @Inherited
public @interface Baz {
String value(); }
public interface Foo{
@Baz("baz") void doStuff();
}
public interface Bar{
@Baz("phleem") void doStuff();
}
public class Flipp{
@Baz("flopp") public void doStuff(){}
}
Run Code Online (Sandbox Code Playgroud)
@Inherited注释在注释时有什么用处@interface Baz?
请不要在使用Spring Framework的注释的上下文中解释我,我不熟悉它.
我正在通过Craig Walls Manning Spring4 in Action.
他建议,在创建JSP视图中,
InternalResourceViewResolver最终将逻辑视图名称解析为引用JSP文件的InternalResourceView实例.但是,如果这些JSP文件引用用于格式化或消息的JSTL标记,那么您可能希望配置InternalResourceViewResolver来解析JSTLView.
使用InternalResourceView Resolver解析器JstlView而不是InternalResourceView所需的只是设置其viewClass属性.
像这样,
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver resolver =
new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
resolver.setViewClass(org.springframework.web.servlet.view.JstlView.class);
return resolver;
}
Run Code Online (Sandbox Code Playgroud)
为什么我需要添加此行
resolver.setViewClass(org.springframework.web.servlet.view.JstlView.class);
这个课程究竟意味着什么?
有什么建议吗?`
我在接受采访时问了这个问题.在我告诉他之前,
一旦线程进入实例上的任何同步方法,任何其他线程都不能在同一实例上输入任何其他同步方法.
考虑一下片段:
Q1:
public class Q1 {
int n;
boolean valueSet = false;
synchronized int get() {
while (!valueSet)
try {
wait();
} catch (InterruptedException e) {
System.out.println("InterruptedException caught");
}
System.out.println("Got: " + n);
valueSet = false;
notify();
return n;
}
synchronized void put(int n) {
while (valueSet)
try {
wait();
} catch (InterruptedException e) {
System.out.println("InterruptedException caught");
}
this.n = n;
valueSet = true;
System.out.println("Put: " + n);
notify();
}
}
Run Code Online (Sandbox Code Playgroud)
Producer1:
public class Producer1 implements Runnable { …Run Code Online (Sandbox Code Playgroud) 来自Java Concurrency in Practice的摘录/片段-
@Immutable
class OneValueCache{
private final BigInteger lastNumber;
private final BigInteger[] lastFactors;
public OneValueCache(BigInteger i, BigInteger[] factors) {
this.lastNumber = i;
this.lastFactors = Arrays.copyOf(factors,factors.length); // 1
}
public BigInteger[] getFactors(BigInteger i){
if(lastNumber == null || lastNumber.equals(i))
return null;
else
return Arrays.copyOf(lastFactors,lastFactors.length); // 2
}
}
Run Code Online (Sandbox Code Playgroud)
作者提到
如果没有构造函数和getter中的copyOf调用,OneValueCache将不会是不可变的.为方便起见,在Java 6中添加了Arrays.copyOf; 克隆也行.
1)Arrays.copyOf在使上述类成为IMMUTABLE时扮演什么角色?怎么样?
以上不可改变的类正如此使用 -
@ThreadSafe
public class VolatileCachedFactorizer implements Servlet{
private volatile OneValueCache cache = new OneValueCache(null, null);
public void service(ServletRequest req, ServletResponse resp){
BigInteger i …Run Code Online (Sandbox Code Playgroud) 我在接受采访时被问到这个问题
如果你这样做,
private int c = d;
private int d;
Run Code Online (Sandbox Code Playgroud)
它会导致编译时错误
在定义之前无法引用字段.
来到面试问题,
1 public static int a = initializeStaticValue();
2 public static int b = 20;
3 public static int initializeStaticValue() {
4 return b;
}
5 public static void main(String[] args) {
System.out.println(a);
System.out.println(b);
}
Run Code Online (Sandbox Code Playgroud)
我a通过调用initializeStaticValue()来获得与初始化相同的响应,其中它引用了一个未定义的值b.
但程序运行正常,编译和打印
0
20
Run Code Online (Sandbox Code Playgroud)
我很困惑为什么
Cannot reference a field before it is defined.
Run Code Online (Sandbox Code Playgroud)
没被抛出.
其次,当我调试它时,为什么控制着陆
3 public static int initializeStaticValue() {
Run Code Online (Sandbox Code Playgroud)
我的意思是,为什么这是该计划的起始位置.
我试图从书中复制一个例子,
该结构可以从下面附加的图像中可视化-
更新
将使用该库的视图与下面给出的一样简单-
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<h:head>
<title></title>
<h:outputStylesheet library="#{facesContext.viewRoot.locale}/default" name="css/rafa.css"/>
<h:outputScript library="#{facesContext.viewRoot.locale}/default" name="rafa.js"/>
</h:head>
<h:body>
<f:view locale="#{localeBean.mylocale}">
<div style="width:100%; text-align:center">
<h:form>
<h:commandButton value="Rafa at Roland Garros" action="#{localeBean.changeLocale('fr')}"/>
<h:commandButton value="Rafa at Wimbledon" action="#{localeBean.changeLocale('en')}"/>
<h:commandButton value="Rafa at US Open" action="#{localeBean.changeLocale('us')}"/>
<h:commandButton value="Rafa at Australian Open" action="#{localeBean.changeLocale('au')}"/>
</h:form>
</div>
<div style="width:100%; text-align:center">
<!--<h:graphicImage library="#{facesContext.viewRoot.locale}/default" name="img/rafa.png"/> -->
<h:graphicImage value="#{resource[facesContext.viewRoot.locale+='/default:img/rafa.png']}"/>
</div>
</f:view>
</h:body>
</html>
Run Code Online (Sandbox Code Playgroud)
与
@Named
@RequestScoped
public class LocaleBean {
private String mylocale = "fr";
// getters & setters
}
Run Code Online (Sandbox Code Playgroud)
我使用 …
这与Joshua Bloch撰写的"Effective Java"一书中创建和销毁对象有关
第1项:考虑静态工厂方法而不是构造函数
此方法将布尔基元值转换为布尔对象引用:
public static Boolean valueOf(boolean b) {
return b ? Boolean.TRUE : Boolean.FALSE;
}
Run Code Online (Sandbox Code Playgroud)
请注意,静态工厂方法与"设计模式"中的"工厂方法"模式不同[Gamma95,p.107].此项中描述的静态工厂方法在设计模式中没有直接等效项.
作者似乎在谈论静态工厂方法和工厂方法模式之间的区别.这有什么区别?
另外一点,BalusC 在这个帖子中提到了 Factory Method下的一个链接,java.util.Calendar#getInstance()这是一个静态工厂方法,因此建议静态工厂方法是Factory Method Pattern的子集.
在记事本中打开一个新文件并在其中插入没有引号的句子,"四分和七年前".
Four 4 characters
score 5 characters
and 3 characters
seven 5 characters
years 5 characters
ago 3 characters
Run Code Online (Sandbox Code Playgroud)
总计:25 + 5空格= 30个字符.
您会发现该文件在磁盘上的大小为30个字节:每个字符1个字节.以getSize.txt名称将文件保存到磁盘.然后查看文件的大小.通常,每个字符都占用一个字节.
大小:30字节
磁盘大小:4.00 KB(4,096字节)
以下段落是从pdf复制粘贴的.
如果您在计算机查看时查看该文件,您会发现每个字节不包含字母而是数字 - 该数字是与该字符对应的ASCII代码(见下文).所以在磁盘上,文件的数字如下所示:
F ourandseven
70 111 117 114 32 97 110 100 32 115 101 118 101 110
通过查看ASCII表,您可以看到每个字符与使用的ASCII代码之间的一一对应关系.注意32用于空格--32是空格的ASCII码.如果我们想要技术上正确的话,我们可以将这些十进制数扩展为二进制数(所以32 = 00100000) - 这就是计算机真正处理事物的方式.
1)我知道每件事都以比特和字节的形式存储,所以通常这意味着 - "你会发现每个字节不包含字母而是数字 - 数字是与字符对应的ASCII码" .一个字节是8位.那么"每个字节一个数字 - 数字是ASCII代码"怎么样?除了0和1之外,一个字节如何包含一个ASCII数字(例如,49为'1')?
2)磁盘上的大小和大小有什么区别?ASCII和Unicode如何适应它?
3)在Java中,字符串是对象.我可以说这是一个多个字符连在一起吗?String str ="四分和七年前"那么str如何存储在内存中.它与保存在记事本文件中的方式相同吗?
我对Java中的Constructors的所有内容都非常了解,我在下面写下这些内容以确保:
每次创建实例时初始化类中的所有变量可能会很繁琐.
在首次创建对象时完成所有设置会更简单.
由于初始化的要求非常普遍,因此Java允许对象在创建时自行初始化.通过使用构造函数执行此自动初始化.
在新操作符完成之前,构造函数在创建对象后立即自动c/d.他们没有返回类型,甚至没有返回.
阅读Herbert Schildt完整参考文献,我发现了这一段.
类的构造函数的隐式返回类型是类类型本身.初始化对象的内部状态是构造函数的工作,这样创建实例的代码将立即具有完全初始化的可用对象.
即使知道好的构造函数没有返回类型,甚至无效,我也会发现自己真的与"隐式返回类型"这个术语混淆了.
某人可以吗?
如何将日期转换为或(Mon Jan 12 00:00:00 IST 2015)格式?MM.dd.yyyydd.MM.yyyy
我尝试使用以下方法
String dateStr = "Mon Jan 12 00:00:00 IST 2015";
DateFormat formatter = new SimpleDateFormat("E MMM dd HH:mm:ss Z yyyy");
System.out.println(formatter.format(dateStr));
Run Code Online (Sandbox Code Playgroud)
但得到了
Exception in thread "main" java.lang.IllegalArgumentException:
Cannot format given Object as a Date
Run Code Online (Sandbox Code Playgroud) java ×8
annotations ×1
bit ×1
constructor ×1
date ×1
factory ×1
filesize ×1
inheritance ×1
jdk6 ×1
jsf ×1
jsf-2 ×1
jsp ×1
jstl ×1
localization ×1
resources ×1
spring ×1
spring-mvc ×1
static ×1
string ×1