1,类
类(设计图):是对象共同特征的描述
对象:是真实存在的具体事物
在Java中,必须先设计类,才能有对象
定义格式:
class 类名{
成员变量;成员方法;
}
class girl{
//属性(成员变量)
public String name;
public int age;
public String gender;
//行为
public void shuiJiao(){
System.out.println("在睡觉");
}
2,对象的创建与使用
对象定义格式:
类名 对象名=new 类名();
对象访问格式:
对象名.属性名
public class GirlFrienf {
public static void main(String[] args) {
girl gf1=new girl();//创建对象
gf1.name="肘子";
gf1.age=18;
gf1.gender="大帅哥";
//访问属性
System.out.println(gf1.name);
System.out.println(gf1.age);
System.out.println(gf1.gender);
//访问方法
gf1.sleep();
gf1.eat();
}
}
对象的内存分配:
堆内存:所有使用new关键字创建的对象都在堆内存中
Java堆和栈的区别:
各司其职:最主要的区别就是栈内存用来存储局部变量和方法调用。而堆内存用来存储Java中的对象。无论是成员变量,局部变量,还是类变量,它们指向的对象都存储在堆内存中。
独有还是共享:栈内存归属于单个线程,每个线程都会有一个栈内存,其存储的变量只能在其所属线程中可见,即栈内存可以理解成线程的私有内存。而堆内存中的对象对所有线程可见。堆内存中的对象可以被所有线程访问。
异常错误:如果栈内存没有可用的空间存储方法调用和局部变量,JVM会抛出java.lang.StackOverFlowError。而如果是堆内存没有可用的空间存储生成的对象,JVM会抛出java.lang.OutOfMemoryError。
空间大小:栈的内存要远远小于堆内存,如果你使用递归的话,那么你的栈很快就会充满。如果递归没有及时跳出,很可能发生StackOverFlowError问题。你可以通过-Xss选项设置栈内存的大小。-Xms选项可以设置堆的开始时的大小,-Xmx选项可以设置堆的最大值。这就是Java中堆和栈的区别。
3,封装
对象代表什么,就要封装对应的数据,并提供数据是对应的行为
private关键字:
1,是一个权限修饰符
2,可以修饰成员变量(变量和方法)
3,被private修饰的成员只能在本类中访问(所以要使用Set()和Get()方法)
public和private相反,表示公共的,公开的,再所有的类中都可以使用它修饰的成员。
针对每一个私有化(private)的变量,都要提供set和get方法 set:给成员变量赋值 get:对外提供成员变量的值
下面两个类,必须在同一个包里面:
package text;
//定义一个类
class girl{
//属性(成员变量)
private String name;
private int age;
private String gender;
//行为
public void shuiJiao(){
System.out.println("在睡觉");
}
//针对每一个私有化的变量,都要提供set和get方法
//set:给成员变量赋值
//get:对外提供成员变量的值
//this关键字:区分局部变量和成员变量,
//不加this:就近原则:加表示成员位置的变量
public void SetName(String name){
this.name=name;
}
public String GetName(){
return name;
}
public void SetAge(int age){
this.age=age;
}
public int GetAge(){
return age;
}
public void SetGender(String gender){
this.gender=gender;
}
public String GetGender(){
return gender;
}
//行为
public void sleep(){
System.out.println("女朋友在睡觉");
}
public void eat(){
System.out.println("女哦朋友在吃饭");
}
}
package text;
//对象的创建与构造
public class GirlFrienf {
public static void main(String[] args) {
girl gf1=new girl();//创建对象
gf1.SetName("肘子");
gf1.SetAge(18);
gf1.SetGender("大帅哥");
System.out.println(gf1.GetName());
System.out.println(gf1.GetAge());
System.out.println(gf1.GetGender());
gf1.sleep();
gf1.eat();
}
}
4,构造方法
构造方法也叫作 构造器,构造函数。
作用:在创建对象的时候给成员变量进行赋值(初始化)的。
格式:
修饰符 类名(参数){
方法体;
}
特点:
1,方法名与类名相同,大小写也要一致
2,没有返回值类型,连void都没有
3,没有具体的返回值(不能由return带回结果数据)
执行时机:
1,创建对象的时候由虚拟机调用,不能手动调用构造方法
2,创建一次对象,就会调用一次构造方法
构造方法注意事项:
① 定义:
系统会默认提供无参构造方法,但当你定义了有参构造,系统将不会提供无参构造
② 重载:
带参构造方法,和无参构造方法,两者方法名相同,但参数不同,这叫做构造方法的重载
③ 推荐的使用方式
无论是否使用,都手动书写无参构造,和带全部参数的有参构造方法
package text;
//定义一个类
class girl{
//属性(成员变量)
private String name;
private int age;
private String gender;
public girl(String name,int age,String gender){
this.name=name;
this.age=age;
this.gender=gender;
}
public void SetName(String name){
this.name=name;
}
public String GetName(){
return name;
}
public void SetAge(int age){
this.age=age;
}
public int GetAge(){
return age;
}
public void SetGender(String gender){
this.gender=gender;
}
public String GetGender(){
return gender;
}
//行为
public void sleep(){
System.out.println("女朋友在睡觉");
}
public void eat(){
System.out.println("女哦朋友在吃饭");
}
}
package text;
//对象的创建与构造
public class GirlFrienf {
public static void main(String[] args) {
girl gf1=new girl("肘子",18,"大帅哥");//创建对象
//girl gf2=new girl();//没有定义有参构造不会报错
//gf1.SetName("肘子");
//gf1.SetAge(18);
//gf1.SetGender("大帅哥");
System.out.println(gf1.GetName());
System.out.println(gf1.GetAge());
System.out.println(gf1.GetGender());
gf1.sleep();
gf1.eat();
}
快捷键:alt+insert
全参构造方法:alt+insert---->Generate---->Constructor---->长按shift+点击最后一个变量
插件ptg:
5,java内存分配介绍
6,this关键字
this作用:区分局部变量和成员变量,不加this:就近原则;加this:表示成员位置的变量
成员变量:类中,方法外
局部变量:方法内,方法申明上
this的本质:代表方法调用者的地址值
方法:method
调用者:s
标签:java,String,对象,gender,void,gf1,public,name From: https://blog.csdn.net/2301_80250542/article/details/136921067