您的位置:首页 > 编程语言 > Java开发

JAVA笔记8__内部类/链表的实现/包装类、享元设计模式/包、访问修饰符

2014-12-05 01:20 609 查看
/**
* 内部类:在一个类的内部中定义的类
* 1. class Outer{
*      class Inner{}
* }
* 2. class Outer{ //方法内部类
*      public void doSomething(){
*          class Inner(){}
*      }
* }
* 2*:1.方法内部类只能在定义该内部类的方法中实例化
*     2.方法内部类对象不能使用该内部类所在方法的非final局部变量
*      (原因:局部变量随着方法调用的结束而消失,而new出来的内部类对象的作用域是可以在方法外的)
* 3. class Outer{ //静态内部类:没有外部类对象时也能够访问它,且仅能访问外部类的静态成员和方法
*          static class Inner{}
*     }
*     Outer.Inner n = new Outer.Inner();
*/
public class Main {
public static void main(String[] args) {
Dog g1 = new Dog(); //产生外部类实例
Dog.ChildDog cg1 = g1.new ChildDog(); //实例化内部类对象,该方式一般不使用
g1.say();
g1.ChildSay();
cg1.say();
}
}

class Dog{ //会生成两个class文件
private String name = "kws";
public void say(){
System.out.println("I'm a Dog, My name is "+name);
}
class ChildDog{ //内部类(成员内部类)
public void say(){
System.out.println("I'm a ChildDog, My mom's name is "+name);
}
}
public void ChildSay(){
ChildDog cg1 = new ChildDog();
cg1.say();
}
}


/**
* 匿名内部类:没有名字的内部类,有三种
* 1.继承式
* 2.接口式
* 3.参数式
*
* 使用匿名内部类几个原则:
* 1.不能有构造方法,只能有一个实例
* 2.不能定义任何静态成员、静态方法
* 3.不能是public, protected, private, static
* 4.一定是在new的后面,用其隐含实现一个接口或实现一个类
* 5.匿名内部类为局部的,所以局部类的所有限制对其生效
*
* 内部类的作用:
* 每个内部类都能独立地继承自一个(接口)实现,所以无论外部类是否已经继承了某个(接口的)实现,
* 对于内部类都没有影响。如果没有内部类提供的可以继承多个具体或抽象的类的能力,一些设计与编程问题
* 就很难解决。从这个角度看,内部类使得多重继承的解决方案变得完整。接口解决了部分问题,而内部类有效地
* 实现了“多重继承”。【JAVA只能是单继承】
*/
public class Main {
public static void main(String[] args) {
Dog d1 = new Dog(){ //1.继承式匿名内部类
public void say(){
System.out.println("我是一只匿名狗");
}
};
d1.say();

Child d2 = new Child(){ //2.接口式匿名内部类
public void talk(){
System.out.println("我是一只继承狗");
}
};
d2.talk();

ChildTalk(new Child(){ //3.参数式匿名内部类
public void talk(){
System.out.println("我是一只参数狗");
}
});
}
public static void ChildTalk(Child c){
c.talk();
}
}

class Dog{
protected String name;
Dog(){};
Dog(String name){
this.name = name;
}
public void say(){
System.out.println("I'm a Dog, My name is "+name);
}
}
class maleDog extends Dog{
public maleDog(String name){
super(name);
}
public void say(){
System.out.println("I'm a maleDog, My name is "+name);
}
}
interface Child{
public void talk();
}


/**
* 链表的实现
*/
public class Main {
public static void main(String[] args) {
NodeManager nm = new NodeManager();
nm.printNode();
nm.addNode("node1");
nm.addNode("node2");
nm.addNode("node3");
nm.addNode("node4");
nm.addNode("node5");
nm.printNode();
nm.delNode("node3");
nm.printNode();
nm.delNode("node1");
nm.printNode();
}
}

class NodeManager{
private Node root; //根结点
public void addNode(String name){
if(root==null){
root = new Node(name);
}else{
root.add(name);
}
}
public void delNode(String name){
if(root!=null){
if(root.name.equals(name)){
root = root.next;
}else{
root.del(name);
}
}
}
public void printNode(){
if(root!=null){
System.out.print(root.name+"-->");
root.print();
}else{
System.out.println("NULL");
}
}
class Node{
private String name;
private Node next;
public Node(String name){ this.name = name; }
public void add(String name){
if(this.next==null){
this.next = new Node(name);
}else{
this.next.add(name);
}
}
public void del(String name){
if(this.next!=null){
if(this.next.name.equals(name)){
this.next = this.next.next;
}else{
this.next.del(name);
}
}
}
public void print(){
if(this.next!=null){
System.out.print(this.next.name+"-->");
this.next.print();
}else{
System.out.println("NULL");
}
}
}
}


/**
* 八种基本数据类型的包装类
* 基本类型      包装类        父类
* 1.int        Integer      (Number)
* 2.char       Character    (Object)
* 3.float      Float        (Number)
* 4.double     Double       (Number)
* 5.boolean    Boolean      (Object)
* 6.byte       Byte         (Number)
* 7.short      Short        (Number)
* 8.long       Long         (Number)
*
* 基本数据类型 --> 包装类    :  装箱操作
* 包装类 --> 基本数据类型    :  拆箱操作
*/
public class Main {
public static void main(String[] args) {
Long x1 = new Long(100); //手动装箱
Long x2 = 100L; //自动装箱
long x3 = x2; //自动拆箱
long x4 = x1.longValue(); //手动拆箱

String s1 = "123456";
int d1 = Integer.parseInt(s1);
Integer d2 = Integer.valueOf(s1);
System.out.println(d1+" "+d2);

Integer w1 = new Integer(100);
Integer w2 = new Integer(100);
System.out.println(w1==w2); //false
Integer w3 = -128;
Integer w4 = -128;
System.out.println(w3==w4); //true
//Integer直接赋值时,当值为1个字节以内的数时,将使用同一个对象(-128~127)
//Byte Short Long Integer 享元设计模式
}

/**
* 享元模式:使用共享对象,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似对象;
* 它适用于大量对象只是重复因而导致无法令人接受的使用大量内存。
* 通常对象中的部分状态是可以分享。常见做法是把它们放在外部数据结构,当需要使用时再将它们传递给享元。
* #运用共享技术有效的支持大量细粒度的对象【例如游戏中的子弹】
*/
}


/**
* 包:用于对多个java源文件的管理,就像我们的文件目录
* 定义一个包:package com.vince  【只能出现在代码中的第一句】
* 运行时必须指定包名   例: java com.vince.Main  或   java com/vince/Main
*
* 访问修饰符
* 作用域:       同一个类     同包     不同包子类     不同包非子类
* public          true       true       true           true
* protected       true       true       true           false
* 默认            true       true       false          false
* private         true       false      false          false
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: