当我写一个类Widget.java
public class Widget {
int data;
String name;
}
编译器生成的构造函数是公共还是默认?
公众就像
public class Widget {
int data;
String name;
public Widget() {}
}
而缺省值则类似于
public class Widget {
int data;
String name;
Widget() {}
}
当我想要创建对象TransLog的实例时,即使我在类TransLog中创建了一个No-Args构造函数,也会抛出一个InstantiationException
Caused by: java.lang.NoSuchMethodException: TransactionLogger$TransLog.<init>()
at java.lang.Class.getConstructor0(Class.java:3082)
at java.lang.Class.newInstance(Class.java:412)
... 20 mor
注:,这是一个自我回答的问题.这可能很简单,但我认为值得分享。
假设我有一个匿名类声明:
MyObject myObj1 = new MyObject() {
};
其中MyObject是:
class MyObject {
public MyObject() { // explicit public constructor
}
...
}
来自Java规范的 (强调我):
匿名类不能有显式声明的构造函数。相反,为匿名类隐式声明匿名构造函数。
如果我试图获得public构造函数的数量:
// Number of public constructors; p
我在Java中有以下代码:
package a;
public classs ClassInOtherPackage{
protected void protectedMethod(){}
protected class protectedInnerClass {}
}
package b;
import a.*;
public class MyClass extends ClassInOtherPackage{
public MyClass(){
MyClass x = new MyClass();
x.protectedMethod(); //&l
考虑以下方案:
SomeClass.java:
package somepackage;
import java.util.List;
public class SomeClass implements SomeInterface {
public SomeClass(boolean add){}
public static void main(String[] args){
SomeSubclass sub1 = new SomeSubclass(false);
for (String s : sub1.getList())
我遇到了一个令人困惑的问题。对于以下代码片段:
class A { };
class E
{
friend A::A() throw();
};
我使用Clang 6编译了这个代码示例,得到了"error:'A‘的非常量表达式声明跟在常量表达式声明之后“。我也尝试了clang 4.0,clang 5.0和gcc 5.4,没有这种错误。这是Clang6中的错误吗?
这段代码
#include <memory>
#include <vector>
class Foo
{
public:
~Foo()
{
}
std::unique_ptr<int> bar;
};
int main()
{
std::vector<Foo> foos;
foos.emplace_back();
}
在g++中产生以下错误消息:
In file included from /usr/include/c++/4.8/memory:64:0,
f
这个问题只适用于一个本机接口.
在代码一,本机代码,iOS中,我试图这样做:
com_codename1_io_Log_p___java_lang_String(CN1_THREAD_GET_STATE_PASS_ARG fromNSString(CN1_THREAD_GET_STATE_PASS_ARG [goCoderLicensingError localizedDescription]));
但我明白:
Implicit declaration of function 'com_codename1_io_Log_p___java_lang_String' is inva
为什么不这样:(vs2010)在类中移动向量?
#include <vector>
class MoveTest
{
public:
std::vector<int> m_things;
};
int _tmain(int argc, _TCHAR* argv[])
{
MoveTest m;
m.m_things.push_back(12);
MoveTest m2 = std::move(m);
// std::vector has been copied, not moved
return 0;
}
这是否意
子类被强制显式调用基类的构造函数,这似乎没有意义。如果用户可以创建自己的构造函数,而不局限于基类,那么它将更加灵活。有人能告诉我为什么这个行为在JAVA中是强制的吗?这样做的好处是什么?
class A
{
public A(String s)
{
System.out.println(s);
System.out.println("BASE parameter
我有一个简单的问题:
class my
{
};
my ob;
编译器允许我创建一个有意义的对象。而且,我知道您不能创建构造函数是私有的对象。
在我看来,类中的所有东西都是private,但显然不是默认的构造函数(因为它允许我创建对象,默认构造函数应该是public)。但令我困惑的是,类中没有public部分。
那么,在本例中,它是否只创建了一个public部分来将默认构造函数放在下面呢?
或者我的理由是不正确的?
此外,在创建/访问对象时,如何在内部组织/跟踪访问公共、私有和受保护的访问?
我得到了这个问题,因为到目前为止,我还没有创建空类的对象。
我有这个程序:
int main()
{
auto l([](){});
::std::cout << ::std::is_move_assignable<decltype(l)>{} << ::std::endl;
}
gcc-6.1.1显示0
clang-3.8.0显示1
这在我的程序中导致了编译错误。哪个编译器是正确的?
错误:
error: object of type '(lambda at t.cpp:5:5)' cannot be assigned because its copy assignment operato
对于如何最好地定义一个可复制但不可移动的类,我有点困惑。在我看来,删除move构造函数是个坏主意,因为那时我无法从临时构造器中构造。另一方面,我不希望编译器隐式地为我生成一个移动构造函数,该构造函数可能是错误的,或者可能导致意外的行为。我的问题是,是否允许编译器隐式地为以下类生成移动构造函数:
class C {
public:
int i_;
C(const C&) = default;
}
根据面向对象编程(OOP)接口不应继承类。
既然Interface不能继承Class,那么java中的接口引用如何使用Object类方法呢?
例:-
public interface Test {
public void functionA();
}
class Child implements Test{
public void functionA() {
}
public static void main(String[] args) {
Test test = new Child();
test.toString(); // since t
我在带有测试的java书中看到了这个程序,我不明白为什么这是正确的答案:
这个程序的输出是什么?
class Base
{
Base()
{
System.out.print("Base");
}
}
public class Alpha extends Base
{
public static void main(String[] args)
{
new Alpha(); /* Line 12 */
new Base(); /* Line 13 */
}
}
所有答案: