Java学习琐碎小知识(一)

1、Java类中的构造器:创建一个对象,类中至少要有一个构造器。如果创建类的时候没有显式定义构造器,编译器会自动帮用户添加一个无参构造器,但不会在源文件中显示。当用户显式定义一个构造器后,系统就不会添加构造器(在hibernate中 在生成对象列表时会调用无参构造器,如果已经定义了有参构造器,则系统无法自动生成含有对象的列表,则需要显式写无参构造器)。
2、对象引用变量:如果在一个方法里声明一个局部引用变量,但没有赋值,那么按照编译器的要求,应该赋值null:Book book=null;而类中的对象引用变量声明时可以无需赋值null,因为创建实力对象时,这些类级引用变量将会被初始化。
3、内存中的对象:在声明变量时需要分配内存空间,对于固定大小的基本数据类型会则会被分配到栈中。而引用对象大小不固定,被分配到堆中, 但当声明一个对象时(Book book;),该引用是被分配到栈中,但并没有数据,此时该引用变量相当于C++中的指针,当创建一个对象时并赋值给它,则它指向堆中的实例对象(book=new Book();myBook=book;)
这里写图片描述
book=new Book()
myBook=new Book();
这里写图片描述
当在一个类中包含另一个引用对象,则当创建这个类的实例后,内部引用対像初始化后,则只能被这个类的对象操作,因为在Java中,除了被赋值对象地址值得引用变量外没有别的方法可以存取对象,所以任何方法都去不到内部的对象。
4、Java中的包:把相关的类或相似功能的类放在同一个包是为了好管理,以java开头的包预留给核心库使用,以javax开头的包是给核心库配套的扩展库使用,用户不要创建以此开头的包名。包名采取基于逆序的域名,基于此,Java引入全限定名,值包含包名的类(com.tr.www.People).一个类一般需要在一个用户建的包名下,因为在缺省的包下类不能被其他包名的类型调用(除非使用映射技术),所以要创建包名。
5、静态成员变量:在静态方法中不能调用实例方法或实例域,因为他们只有在创建对象之后存在。但可以访问其他的静态方法或域。比如在类A中有一个非静态成员域 int b,如果在类中的mian函数中没有实例化类A直接引用b则是不可以。静态成员在类加载的时候就会被初始化,int (默认0)。虽然静态变量的值可以被修改,但static final Book A_BOOK一旦被赋值就 不能被修改(静态final变量指向对象地址是不变的,但对象可以自身修改),但可以改变对象内部的值 A_BOOK.name=”C++”.
6、Java中的访问控制修饰符:类的访问控制符,只有public和default两种(一个类文件中只能有且必须有一个公共类,但可以包含多个default类)。public指所有工程内的类都可以访问,而default则只能是在同一个包中才能访问。 类成员访问修饰符有四种:public、protect、default、private访问级别:
这里写图片描述
但一个问题需要注意:当一个子类可以被定义在与父类同一个包内或者不同包内,而实例化时也可以在同一个包内或不同包内实例化时的访问控制:
这里写图片描述

7、比较两个string对象:String s1=”java”;
String s2=”java”; if(s1==s2){}条件为true,因为字符串字面量”java”在JVM内存中只有一个存本,而s1和s2作为引用变量则指向同一个内存中存本地址,所以相同。==在这里两个对象变量比较其实是比较引用的内存地址。所以在String s1=new (“java”);String s2=new (“java”);if(s1==s2)时是false,因为只要使用new 关键字系统就会创建一个新的对象,而地址也就自然不相同,返回false。当要比较两个字符串相等时一般用自带的方法equals()来比较,”java”.equals(s1);
8、StringBuffer和StringBuilder:在Java中String大小是不变的,当改变字符串的时候,是通过创建一个新的字符串然后赋值给变量,因此不适合字符串增删改动。而StringBuffer用于可变字符串,该方法是同步的,用于多线程的环境,但同步带来的代价是性能的降低。而jdk5出现的StringBuilder是它的非同步版本,如果不需要同步则使用StringBuilder(未指定大小默认16个字符).与之相同的还有hashMap(不同步)和hashTable (同步),性能前者较快,由于hashMap非同步,多线程操作可能会出现问题,所谓同步,就是这里不同线程使用的时候对象是否一致,加锁后访问就是同步,不能同时访问。同实现list接口的vector(同步)和ArrayList(不同步)。
9、java.lang.Class:是用来描述一个对象的类型,对于同一类的所有实例共用一个Class对象模板。其静态方法Class ClassType=Class.forName(“classname”),加载并创建一个指定类名的Class对象,ClassType.newInstance()实例化一个类。
10、Java中的自动装箱与拆箱:装箱是指基本类型转换为对应的封装实例,比如int转Integer。拆箱则是把相应的封装对象转换为基本类型。jdk1.5及以上支持。其中在collecton集合中中,是不支持存入基本类型的,如果存入基本类型需要转换为对应对象, 但Java自动装箱功能则免除麻烦。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值