In this How Default Package is Created where class file is stored
class Package
{
public static void main(String[] args) {
System.out.println("Default Package");
}
}
When we create a java class and dodnot mention any package name for creating this particular class within any java/web project the eclipse /netbeans will automatically creates the default package.
Related
I just started studying OOP and Packages in Java. I have a question regarding package importing in Java.
I have two files, named ImportThis.java and Here.java
The directory for ImportThis.java on my local machine is F:\VS Codes\master\folderone\folderoneone\ImportThis.java. And the contents of ImportThis.java is:
package master.folderone.folderoneone;
public class ImportThis {
public static void aStaticMethod() {
System.out.println("Hello World");
}
}
The directory for Here.java on my local machine is F:\VS Codes\master\foldertwo\foldertwotwo\Here.java. And the contents of Here.java is:
package master.foldertwo.foldertwotwo;
public class Here {
public static void anotherMethod() {
ImportThis.aStaticMethod();
}
}
By looking at the contents of Here.java, you might be able to tell that I want to import the class ImportThis from ImportThis.java to Here.java, and it is indeed what I've been trying to do. But both ImportThis.java and Here.java came from different folders and packages. I've tried using import master.folderone.folderoneone.ImportThis; on Here.java but VS Code says it cannot be resolved. Looking forward to the answer for my question!
EDIT: Changed package names and lowercased the folder names
Try:
package master.foldertwo.foldertwotwo;
import master.folderone.folderoneone.ImportThis; //<-import statement
public class Here {
public static void anotherMethod() {
ImportThis.aStaticMethod();
}
}
I create package-info of package foo.bar and class foo.bar.BarCl in next code
public static void main(String[] args) throws ClassNotFoundException, IOException {
DynamicType.Unloaded<?> make = new ByteBuddy().makePackage("foo.bar").make();
DynamicType.Loaded<Object> load = new ByteBuddy()
.subclass(Object.class)
.name("foo.bar.BarCl")
.make()
.include(make)
.load(Main2.class.getClassLoader(), ClassLoadingStrategy.Default.INJECTION);
load.saveIn(new File("folder"));
Class<?> loaded = load.getLoaded();
System.out.println(loaded.getPackage());
}
Class and package info correctly writing in folder:
package foo.bar;
interface $$package-info /* Real name is 'package-info' */ {
}
package foo.bar;
public class BarCl {
public BarCl() {
}
}
But in runtime after injecting this classes i get loaded.getPackage()==null
How i can associate package-info with generated class?
P.S. In real task i need to generate package-info with JAXB annotation #XmlSchema, that specify xml namespace. Without it, classes have naming collisions
Packages are class loader respobsibility and not defined by a package-info class. You can define them using the loader DSL.
i am creating a little game with libgdx framework and netbeans 8. I have all java classes in a single package that match with the directory structure.
The problem is that i cant import or isntantiate classes, for example:
package com.myfolder.folder2;
import ...
public class myclass1{
private myclass2 mc2;
etc...
}
In this case myclass2 is public and is inside the package but netbeans complains "cannot find symbol".
If i try with alt+enter, netbeans says "Create class myclass2 in package com.myfolder.folder2" or the same like an inner class. If i press the first option, netbeans create a class in the package with the file name myclass2_1 (becouse myclass2 exists!), and myclass1 doesnt recognize the new class.
If i try to import the class:
import com.myfolder.folder2.myclass2;
It gives me the same error, and in fact the code completion tool only gives me one crazy option in the import sentence:
import com.myfolder.folder2.myclass1;
Import the same class.
What can i do? I never have these problems using netbeans.
PD: Sorry for my english :)
You can use a class inside the same package like this:
ClassName classVariableName = new ClassName();
Then when you want to run something from the class you would put
classVariableName.MethodThatIWantToRun();
Or if you want to access a property from that method you would access it in a very similar way:
classVarabileName.PropertyIWantToAccess
Example:
You have one class with a property you want to access:
class MyClass {
public int MyProperty = 5;
}
You access it in this class:
public class MainClass {
public static void main(String[] args) {
MyClass myClass = new MyClass();
System.out.println(myClass.MyProperty);
}
}
If that doesn't work than you might have some other problem.
It was an error with one of my class package definition:
public class DesktopLauncher{
public static void main(String... args){
LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration();
.
.
.
new LwjglApplication(new MyClass, config);
}
}
It was in MyClass, becouse i copied a snippet from an older project, and accidentally copied the older package.
NetBeans is not smart enough,
Solution: just declare the package name in all classes, example:
Class A:
package test;
public class ClassA {
public static void main(String[ ] args) {
ClassB.myFunctionB();
}
}
Class B:
package test;
public class ClassB {
public static void myFunctionB () {
System.out.print("I am ClassB!");
}
}
In my Win7 machine I have added in the CLASSPATH like this:
CLASSPATH=D:\Dev\Java;C:\Program Files (x86)\Java\jre1.8.0_20\lib\ext\QTJava.zip.
In my directory tree I have created a D:\Dev\Java\abc folder and placed a filed called Address.java that contained this code:
package jme;
public class NewClass {
}
Having done that, I created a project that looks like this:
package javaapplication1;
package abc; // << Error
public class JavaApplication1 {
public static void main(String[] args) {
abc.Address address; // << Error
System.out.println("Jaaaa");
}
}
Why the abc package, when located in the CLASSPATH, is not recognized?
You need to use import ...
package javaapplication1;
import abc.*; // No error if you have the package in the classpath ...
public class JavaApplication1 {
public static void main(String[] args) {
Address address; // No need to prefix with abc, since you imported it before ...
System.out.println("Jaaaa");
}
}
You can't declare double package for a class in Java, and I think that is not what you really want to do ...
To import correctly the classes contained in the abc package make sure to have the abc package and their related classes in your classpath ...
Sorry guys for the horrendous mishap, I am kinda new here, but I'm a quick learner.
The CLASSPATH reads: D:\Dev\Java\abc;C:\Program Files (x86)\Java\jre1.8.0_20\lib\ext\QTJava.zip
I have created a project and Hello.java file without package name
public class Hello {
public String sayHello(){
return "Say Hello";
}
}
I exported this project into hello.jar.
Now I have created another project and Main.java to call sayHello() method. I added hello.jar in classpath but the below code showing me an error 'Hello cannot be resolved to a type'
public class Main {
public static void main(String[] args){
Hello h=new Hello(); // Error
}
}
It's not possible due to the fact that your Hello.java class needs to be inside a package stored in your JAR file to enable you to reference it. The structure of your JAR should at least be
hello.jar/packageName/Hello.java
after creating it like that it will be imported as
import packageName;
and you will be able to use classes from aformentioned package.
No. It is not possible.
Try giving package name to Hello java file and then create again jar and then write import statement in Main class file
package com;
public class Hello {
public String sayHello(){
return "Say Hello";
}
}
and in Main class add following line
import com.Hello;
public class Main {
public static void main(String[] args){
Hello h=new Hello();
}
}