我从PHP
转到Java
,因为英语不是我的主要语言,所以很难理解OOP。我想要一个简单的答案(尽可能简单,哈哈)。是什么区别:
class Munikas {
public Munikas(){
}
public void rytas(){
System.out.println("Labas Rytas");
}
public static void main(String[] args){
Munikas labas = new Munikas();
labas.rytas();
}
}
和
class Munikas {
public void rytas(){
System.out.println("Labas rytas");
}
public static void main(String[] args){
Munikas labas = new Munikas();
labas.rytas();
}
}
第二,我不使用constructor
。它将来如何影响我的代码?
答案 0 :(得分:12)
您提供的代码段之间没有区别。用户提供的no-arg构造函数与默认情况下由Java提供的默认no-arg构造函数基本相同。
如果你在那个no-arg构造函数中做了什么,那么会有区别,但是作为编写者,这两个代码样本是等价的。
Java Language Specification为此提供了更多上下文,代码示例与您自己的代码示例类似。
答案 1 :(得分:6)
没有区别。当你的类没有定义任何构造函数时(如在你的第二个代码片段中),编译器将自动插入一个带有空体的无参数构造函数,因此第二个代码段与第一个相同。
答案 2 :(得分:1)
您不必使用空构造函数。编译器会自动生成它。
答案 3 :(得分:1)
类具有在幕后创建的默认构造函数。在第一个中添加了构造函数。第二个,java编译器将创建一个空的默认构造函数。
此处有更多信息:https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html
希望这有助于:)
答案 4 :(得分:0)
Java构造函数 是使用new
关键字将对象实例化时调用的特殊方法:
ClassName referenceName = new ClassName();
默认构造函数:
public ClassName(){ // no statements }
班级中的构造函数不是必须。如果您没有在类中定义构造函数,那么 JVM 会添加默认。
在第一个代码中:
您已经定义了没有任何语句的默认构造函数,因此它什么都不做。这就像没有定义构造函数一样。
在第二个代码中:
JVM 会自动定义与第一个代码中相同的默认构造函数。因此,不添加构造函数不会有任何影响。
答案 5 :(得分:0)
空构造函数等效于不提供构造函数,但通过设置空构造函数,您可以指定要将哪个级别的可访问性设置为构造函数本身,而不管类具有哪些可访问级别。如在提供的示例中,如果要阻止启动类,则必须设置私有构造函数。
package bf.io.openshop.api;
import bf.io.openshop.CONST;
public class EndPoints {
/**
* Base server url.
*/
private static final String API_URL = "http://77.93.198.186/v1.2/"; // staging
public static final String SHOPS = API_URL.concat(CONST.ORGANIZATION_ID + "/shops");
public static final String SHOPS_SINGLE = API_URL.concat(CONST.ORGANIZATION_ID + "/shops/%d");
public static final String NAVIGATION_DRAWER = API_URL.concat("%d/navigation_drawer");
public static final String BANNERS = API_URL.concat("%d/banners");
public static final String PAGES_SINGLE = API_URL.concat("%d/pages/%d");
public static final String PAGES_TERMS_AND_COND = API_URL.concat("%d/pages/terms");
public static final String PRODUCTS = API_URL.concat("%d/products");
public static final String PRODUCTS_SINGLE = API_URL.concat("%d/products/%d");
public static final String PRODUCTS_SINGLE_RELATED = API_URL.concat("%d/products/%d?include=related");
public static final String USER_REGISTER = API_URL.concat("%d/users/register");
public static final String USER_LOGIN_EMAIL = API_URL.concat("%d/login/email");
public static final String USER_LOGIN_FACEBOOK = API_URL.concat("%d/login/facebook");
public static final String USER_RESET_PASSWORD = API_URL.concat("%d/users/reset-password");
public static final String USER_SINGLE = API_URL.concat("%d/users/%d");
public static final String USER_CHANGE_PASSWORD = API_URL.concat("%d/users/%d/password");
public static final String CART = API_URL.concat("%d/cart");
public static final String CART_INFO = API_URL.concat("%d/cart/info");
public static final String CART_ITEM = API_URL.concat("%d/cart/%d");
public static final String CART_DELIVERY_INFO = API_URL.concat("%d/cart/delivery-info");
public static final String CART_DISCOUNTS = API_URL.concat("%d/cart/discounts");
public static final String CART_DISCOUNTS_SINGLE = API_URL.concat("%d/cart/discounts/%d");
public static final String ORDERS = API_URL.concat("%d/orders");
public static final String ORDERS_SINGLE = API_URL.concat("%d/orders/%d");
public static final String BRANCHES = API_URL.concat("%d/branches");
public static final String WISHLIST = API_URL.concat("%d/wishlist");
public static final String WISHLIST_SINGLE = API_URL.concat("%d/wishlist/%d");
public static final String WISHLIST_IS_IN_WISHLIST = API_URL.concat("%d/wishlist/is-in-wishlist/%d");
public static final String REGISTER_NOTIFICATION = API_URL.concat("%d/devices");
// Notifications parameters
public static final String NOTIFICATION_LINK = "link";
public static final String NOTIFICATION_MESSAGE = "message";
public static final String NOTIFICATION_TITLE = "title";
public static final String NOTIFICATION_IMAGE_URL = "image_url";
public static final String NOTIFICATION_SHOP_ID = "shop_id";
public static final String NOTIFICATION_UTM = "utm";
/// Empty constructor is equivalent to providing no constructor
/// but if you want to prevent the initiation of the class then you have to set a private constructor.
private EndPoints() {}
}
答案 6 :(得分:-1)
简单来说,构造函数允许您使用以下内容创建类的实例对象:
Munikas testObject = new Munikas();
当您尝试使用非STATIC方法时,两者之间的区别将很明显。方法rytas()是非静态的,这意味着你需要使用类的实例化对象来调用它,如下所示:
testObject.rytas();
因此,在使用rytas时,您需要使用构造函数。正如其他人提到的那样,您不需要添加代码来创建空构造函数,但有时您需要为带参数的对象使用构造函数。无论是否有构造函数,主STATIC方法都可以,只需使用类(Munikas)本身即可调用。有关详细信息,请查看this。希望有所帮助。