图示java中对类、创建初始化对象的理解

1、类和对象

是构造对象的蓝图或模板,我们可以将类想象成制作小甜饼的切割机,将对象想象成小甜饼,切割机是改变不了的,而制作出的小甜饼可以不同。由类构造对象的过程称为创建类的实例。(一个抽象一个具体,可以自己多想一些这样的例子方便理解)

  1. 类之间,最常见的关系有:(了解)
    依赖(use-a):一个类的方法操纵另一个类的对象。(应该减少相互依赖的类。如果类A不知道B的存在,它就不会关心B的任何改变,就是让类之间的耦合度最小)
    聚合(has-a):类A的对象包含B的对象。
    继承(is-a):定义一个通用的类(父类),扩充该类为一个更加特定的类(子类)

  2. 一个类的组成

类名 class {
	成员变量;
	构造器;
成员方法()
	public static void main(){
	类名 p = new 类名();
	//p叫实例,而不能说p是对象。实例在栈中,对象在堆中,操作实例实际上是通过实例的引用间接操作对象。多个实例可以指向同一个对象。分清实例和对象。
	}
}
  1. 成员变量:实例化对象后,对象通过类中的成员变量实例化形成自己的属性(实例域,可能包含类中所有的成员变量,也可能是部分,这取决于构造器),通过对象的引用访问,对于成员变量在初始化之前都会有一个默认的初始值,这里尤其要注意引用类型和内置类型初始值的不同。

  2. 构造器:伴随着new操作符的执行被调用地方法,一个对象必须经过这个步骤才能生成,但是对象地引用在对象造好之前就已经产生,故而有了this
    public 类名(){}
    A:用于将默认域初始化希望的状态 (对于每个特定的类实例化对象后都有一组特定 的实例值域,这些值的集合就是这个对象的当前状态)
    B: 支持重载(往往要通过一个类构造多个对象,不同对象的实例域可能不同)。
    C: 不能对一个已经存在地对象调用构造器来达到重新设置实例域地目的。

  3. 成员方法:操作数据的过程,用于描述一个对象的行为,所有实例化后的对象都可以共享他。
    这里要注意:创建出来的对象只包含属于各自的成员变量,且并不包括成员方法。因为同一个类的对象拥有各自的成员变量,存储在各自的堆中,但是他们共享该类的方法,并不是每创建一个对象就把成员方法复制一次。

  4. main()方法,是一个静态方法,不对任何对象进行操作,事实上在启动程序时还没有任何对象,main()方法将执行并创建程序所需要的对象。

  5. 实例化一个对象具体干了什么?通过一个具体的类来说明

 class Person{
	private String name;
	int age;
	static String dynasty;
	public Person(){
	}
	public Person(String name,int age){
		this.name= name;
		this.age = age;
	}
	public Person(String name,int age,String dynasty){
		this.name = name;
		this.age = age;
		this.dynasty = dynasty;
	}
	public void show(){
		System.out.println("name"+name+"age"+age+"dynasty"+dynasty);
	}
	public String getName(){
		return name;
	}
	//public void setName(Person p1,String name){
		//p1.name = name;
	//}
	public void setName(String name){//name是私有,所以给了构造来访问
		this.name = name;
	}
	public void getAge(){
		return age;
	}
	public void getAge(int age){
		this.age = age;
	}	
}
public class PersonDemo{
	public static void main(String[] args){
		Person p1 = new Person("王阳明",3,"明");
		p1.show();
		Person p2 = new Person("徐阶",15);
		p2.show();
		Person p3 = new Person("白居易",18);
		p3.show();
		p3.dynasty="唐";
		p1.show();
		//System.out.println(p1.getAge());
		p1.setAge(999);
		System.out.println(p1.getAge());
		//p1.setName("张居正");
		//System.out.println(p1.getName());
		//p1.setName(p1,"王保保");
		//System.out.println(p1.getName());
	}
}

1、创建对象初始化的过程:
A:把Person.class加载到内存
B:在栈内存给变量p1开辟一块内存空间
C:在堆内存为p1对象申请一个空间
D:给成员变量进行默认初始化,null,0,null
E:通过构造方法给成员变量实例化形成对象的实例域:王阳明,3,明
F:数据初始化完毕,然后把堆内存的地址值赋值给栈内存的p1变量。
在这里插入图片描述
2、方法的调用
在这里插入图片描述

3、修改引用类型的值(this关键字的使用)
在这里插入图片描述
关于this关键字:当前对象的引用,因为在创建对象的时候第一步就是分配内存,已经有一个引用之后此时进入了构造之后是已经有了。用法
A:在构造方法中调用其他构造方法。调用语句必须出现在第一行,
B:通过this访问属性或者方法(一般出现在命名遮挡的时候,name shadow)

public void setName(String name){
		name = name;
}

在参数传递过程中,形参是引用类型,在堆中开辟内存保存数值,然后引用给栈中的变量保存,方法内的变量name总是遵循就近原则,这里并不会匹配到成员位置,而认为是形参的变量名,所以成了自己赋给自己了。
解决办法:一种是区别形参的名字,防止遮挡,另外一种是借用this关键字引用,表明是当前引用访问的是对象实例域。
4、关于关键字static(static的含义就是和对象解绑)
从内存图中可以看出静态修饰的东西在方法区的静态部分,属于类,可以直接通过类名进行调用,但是实例化对象后在堆区仍然有静态的标记,所以依然可以通过对象调用。静态方法和属性都不依赖于对象,所以也就无法使用this关键字。

小结注意:

  • 类的成员变量被实例化的那些成员变量是对象的实例域,且存储在堆上各自的对象中。并且类的成员方法是所有对象所共享的,只有一份。
  • 只有在有对象需要调用方法时候,这些方法才会被压入栈中,并且执行完毕后就自动释放。
  • 涉及到原理性的、内存类的东西往往比较博大精深,这只是我的一 点小理解,如果有不当之处,再回来补漏洞吧。
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要在 PostgreSQL 中将实体化图示数据复制到数据库表中,可以使用二进制型(例如 bytea)或者 Blob 型的字段来存储实体化图示数据。以下是一个示例,演示了如何使用 COPY 命令将实体化图示数据从文件中导入到 bytea 型的字段中: 1. 创建一个包含 bytea 字段的表 ```sql CREATE TABLE mytable ( id SERIAL PRIMARY KEY, name VARCHAR(50), image BYTEA ); ``` 2. 创建一个包含实体化图示数据的文件,例如 myimage.png。 3. 将实体化图示数据转换为二进制格式,并将其存储到一个变量中。可以使用 Python 程序来完成此操作,示例代码如下: ```python with open("myimage.png", 'rb') as file: binarydata = file.read() ``` 4. 将二进制数据插入到表中。可以使用 psycopg2 库来连接到 PostgreSQL 数据库并执行 SQL 查询,示例代码如下: ```python import psycopg2 conn = psycopg2.connect("host=localhost dbname=mydatabase user=myusername password=mypassword") cursor = conn.cursor() query = "INSERT INTO mytable (name, image) VALUES (%s, %s)" data = ("My Image", psycopg2.Binary(binarydata)) cursor.execute(query, data) conn.commit() cursor.close() conn.close() ``` 5. 使用 COPY 命令将实体化图示数据从文件中导入到 bytea 型的字段中。在命令行中执行以下命令: ```sql COPY mytable (name, image) FROM '/path/to/myimage.png' WITH (FORMAT binary); ``` 这是一个简单的示例,演示了如何在 PostgreSQL 中将实体化图示数据复制到数据库表中。请注意,这只是一个示例,实际操作可能需要更多的代码和步骤。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值