Java与C++相比,java是一种更“纯粹”的面向对象的编程语言。
创建一个简单的字符串对象:
String s = new String("hello world");
s 是对象字符串"hello world"的引用,s是存在虚拟机栈中,而字符串则是保存在公共区域:堆中。
永远不需要关心销毁对象
1.变量的作用域的范围由花括号决定
public static void main(String[] args) {
{
int x = 12;
{
int y = 13;
}
System.out.println(x);
System.out.println(y);
}
}
结果如图:
上面的程序中,打印x时,可以访问x,而找不到y,因为y已经超出了作用范围。
2.在C和C++中,可以将一个较大作用的变量隐藏起来,而java中不能这样做
public static void main(String[] args) {
{
int x = 12;
{
int x = 13;
}
}
}
结果如图:
3.对象的作用域
{
String s = new String("hello world");
}
当离开作用域后,s指向的String对象仍然占据着内存,而我们无法访问到这个对象,因为这个对象唯一的引用已经超出了作用范围。这个对象我们没有办法去访问它,但我们却没有主动释放它所占据的内存,试想一下,如果多次发生这种情况,那不是内存不知不觉很快被用完了吗?其实,我们编译好的程序运行在java虚拟机上,虚拟机有一个垃圾回收机制(GC),去帮我们自动去收回那些不用的对象占用的资源。
Static 类方法和类变量
当我们创建一个类后,是不是我们必须要创建这个类的一个对象才能调用类中方法和变量呢?当采用static变量(public)和方法(public)时,可以通过类去访问。
public class Main {
public static void main(String[] args) {
System.out.println(StaticTest.i);
StaticTest.show_i();
}
}
class StaticTest{
static int i = 47;
static void show_i(){
System.out.println(i);
}
}
即使创建了两个StaticTest的对象,它们的i是同一个i。对于静态方法,不能调用非静态方法,反过来倒是可以,而且静态方法里没有this。
java程序的编译执行
在刚学习java的时候,大家可以选择一个自己喜欢的IDE去编写java程序,比如Eclipse 、IntelliJ IDEA。用这些工具,不用手动去编译java源文件。有时,你也可以使用javac去编译你的*.java 文件成class文件,然后再运行。这里javac的一些基本使用可以参考这个的教学: https://blog.youkuaiyun.com/wen294299195/article/details/39964971
虽然他在ubuntu上,在windonws下的命令行也差不多。(默认大家都安装好了jdk)。