//大家可以关注一下我的博客  我的博客所有随笔都是我从基础开始学习java的所有知识点

/*构造方法是一种特殊的方法,专门用于构造/实例化对象,
形式:[修饰符] 类名(){ }
构造方法根据是否有参数分为无参构造和有参构造*/
public class Dog {                 //创建Dog类
String name;
int health;
int love;
String sex;
/*
无参方法(一般没有构造方法,系统默认无参方法,
同时可以直接在上面属性声明后面赋值,如果没有赋值,系统自动输入默认值)
但是加有参方法时,建议一定要把无参加上
修饰符+类名(){}*/
public Dog(){
health=90;
love=10;
}

public void showOf(){
System.out.println("我的名字叫"+name);
System.out.println("健康值:"+health);
System.out.println("亲密度:"+love);
System.out.println("性别:"+sex);
}
}

public class Penguin {      //创建Penguin类
String name;
int health=; //属性
int love=;
String kind;
public void pay(){ //方法
System.out.println("我的名字叫"+name);
System.out.println("健康值"+health);
System.out.println("亲密度"+love);
System.out.println("品种"+kind);
}
}

import java.util.Scanner;
public class Pet {
public static void main(String [] ages){
Scanner arr=new Scanner(System.in);
System.out.println("请输入宠物的名字");
String name=arr.next(); System.out.println("请选择宠物类型1.企鹅2.狗狗");
int a=arr.nextInt();
if (a==){
Penguin sc=new Penguin(); //插入Penguin包
sc.name=name; //赋值(从输入录入的值) System.out.println("请选择性别1.Q女2.Q男");
int b=arr.nextInt();
if (b==) {
sc.kind="Q女"; //赋值
sc.pay();
}else {
sc.kind="Q男";
sc.pay();
}
}else {
Dog sc=new Dog();
sc.name=name;
System.out.println("请选择狗的种类1.土狗2.腊肠");
int b=arr.nextInt();
if (b==){
sc.sex="雄性";
sc.showOf();
}else {
sc.sex="雌性";
sc.showOf();
}
}
}
}

4种结果

有参构造


/*构造方法是一种特殊的方法,专门用于构造/实例化对象,
形式:[修饰符] 类名(){ }
构造方法根据是否有参数分为无参构造和有参构造*/
public class Dog {
String name;
int health=;
int love=;
String sex; public Dog(){
} /*当构造一个对象时可以直接在构造方法中传递参数,
但是加有参方法时,建议一定要把无参加上
this 是一个关键字 表示对象本身,本质上是对象的地址,用来引用对象,
this用于访问本对象属性,同时解决局部变量和成员变量同名的问题。
通过打印this中的引用,可以看出对象dog和this指向同一内存。
一般而言,dog(在下面提取Dog类可见)用于类的外部,this用于类的内部。
因为类的内部根本不知道dog变量名的存在。
修饰符 类名(是属于Pet的属性){}
this可以调用属性也可以调用方法和本类的构造方法(再下面代码有讲调用方法)
*/ /* 如果没有赋值
public Dog(String name,int health,int love,String sex){ //在Pet赋值
this.name=name; //pet先赋值给括号里的属性
this.health=health;// this.Dog类的属性=括号内的属性
this.love=love;
this.sex=sex;
}*/
//如果已经赋值,可以这样写
public Dog(String name,String sex){ //在Pet赋值
this.name=name; //pet先赋值给括号里的属性
this.sex=sex;// this.Dog类的属性=括号内的属性 } public void showOf(){
System.out.println("我的名字叫:"+this.name);
System.out.println("健康值:"+this.health);
System.out.println("亲密度:"+this.love);
System.out.println("性别:"+this.sex);
}
}


public class Pet {
public static void main(String [] ages){
//如果没有赋值这样写
//Dog dog=new Dog("黑狗",50,50,"雄");
//如果已经赋值这样写
Dog dog=new Dog("黑狗","雄");//类是用new引入
System.out.println("dog:"+dog);//对象的地址
dog.showOf();//用Dog类的方法输出
}
}

两种结果

 对象初始化内存图

Car car  = new Car(…);

当实例化一个对象时,jvm首先把Car.class加载到方法区

[1]读取Car.class 根据声明的成员变量计算申请内存需要的字节数

[2]读取Car.class 中的静态成员,给静态变量分配空间并初始化。

new Car 申请内存得到一个car对象,此时才有对象的空间。showInfo才可以通过car对象调用。

方法的调用内存图

被 static 修饰的静态方法可以访问实例,而实例不可以访问静态,因为静态在类中被先访问(因为在类中,静态优先访问)
如果类中所以都是静态的,那么可以在测试类中使用静态导入 import static ,这样在使用这个类时可以直接使用
/*需求:统计宠物店有几只狗
统计宠物店有几只狗的功能应该放在类功能上,不应该属于某个对象
声明一个变量用于统计个数,这个变量应该被类的实例共享。
被类的实例共享的区域在方法区(Car.class)
用static关键字声明这样的变量 static 关键字表示静态,可以修饰变量,也可以修饰方法。
静态变量
static 修饰的变量称为静态变量/静态属性,形式 :static 类型 变量名称 [= 初始值]
被static修饰的变量称为静态变量,归类所有,
分配在方法区(共享区)中的静态区,可以被类的实例共享访问。 */
public class Dog {
String name;
int health;
int love;
String sex;
static int count=;
/*静态变量归类所有,也叫类变量,访问方式
[1] 类名.静态变量(推荐)
[2] 对象.静态变量*/
public Dog(){
Dog.count++;
}//必须两种构造都写 public Dog(String name,int health,int love,String sex){
this.name=name;
this.health=health;
this.love=love;
this.sex=sex;
Dog.count++;//必须两种构造都写
} public void showOf(){
System.out.println("我的名字叫:"+this.name);
System.out.println("健康值:"+this.health);
System.out.println("亲密度:"+this.love);
System.out.println("性别:"+this.sex);
System.out.println("我是第"+Dog.count+"只狗");
}

//实例方法可以访问静态成员。
       //静态方法不能访问非静态成员。
       //[修饰符] static 返回值类型 方法名(arg…){}

//static 修饰的方法称为静态方法,形式

public static int jiaoDog(){

        return Dog.count;
       }

}

public class Pet {
public static void main(String [] ages){
Dog dog1=new Dog("黑狗",,,"雄");
dog1.showOf();
Dog dog2=new Dog("白狗",,,"雌");
dog2.showOf();
Dog dog3=new Dog("黑狗",,,"雄");
dog3.showOf(); System.out.println(Dog.count);
System.out.println(dog2.count);
//类名.静态变量 对象.静态变量 都得到狗的总数
// 所以建议选 类名.静态 因为选对象容易误会成这是第几只狗 其实所以德对象都是一样的

//静态方法归类所有,调用形式
//[1] 类名.方法名() (推荐)
//[2] 对象.方法名()
//得出来结果同上
System.out.println(Dog.jiaoDog());
System.out.println(dog2.jiaoDog());

      }
}

代码块通过{}声明,根据其位置可以分为普通代码块、静态代码块、构造代码块、同步代码块(多线程讲解)

静态代码块

静态代码块位于类中,归类所有,用static修饰。在类加载时执行,在构建多个对象时只执行一次。

静态代码块一般用于初始化静态资源,构造代码块一般用于初始化实例成员。

普通代码块一般存在于方法或者类、方法等的定义中,普通代码块形成一个作用域

构造代码块位于类中。构造代码块在构造方法前执行。构造一个对象执行一次。

/*封装:将类的某些信息隐藏在类内部,不允许外部程序直接访问,
而是通过该类提供的方法来实现对隐藏信息的操作和访问。
封装的步骤
[1]属性私有化
[2]提供公共的设置器和访问器
[3]在设置器和访问器中添加业务校验逻辑
private 私有的,对外不可见
*/
public class Dog {
private String name; //private 私有的,对外不可见
private int health; //private 私有的,对外不可见
private int love; //private 私有的,对外不可见
private String sex; //private 私有的,对外不可见
static int count=0;
//提供公共的设置器(setter)(设置访问条件,不同条件有不同的应对)和访问器(getter)
//设置器在下面被调用并赋值
public void setName(String name){
if(name.equals("")){
System.out.println("姓名不能为空");
}else {
this.name=name;
}
}
//用public修饰的成员变量和方法称为共有变量和共有方法:
//因为上面已经私有化了,所以调用Dog类只能通过这个来返回值
public String getName(){
return this.name;
} public void setHealth(int health){
if (health<0){
System.out.println("健康值不合法");
}else {
this.health=health;
}
}
public int getHealth(){
return this.health;
}
public void setLove(int love){
if (love<0){
System.out.println("亲密度不合法");
} else {
this.love=love;
}
}
public int getLove(){
return this.love;
}
public void setSex(String sex){
if (sex.equals("")){
System.out.println("性别不能为空");
} else{
this.sex=sex;
}
}
public String getSex(){
return this.sex;
}
//无参构造
public Dog(){
Dog.count++;
}
//有参构造
public Dog(String name,int health,int love,String sex){
this.setName(name);
this.setHealth(health)//this调用本类的构造方法 this()
this.setLove(love);
//this.showOf(); this调用方法

//注意:this调用其他构造方法必须写到构造方法的第一句。

this.setSex(sex);
Dog.count++;
} public void showOf(){
System.out.print("我的名字叫:"+this.name+"\t");
System.out.print("健康值:"+this.health+"\t");
System.out.print("亲密度:"+this.love+"\t");
System.out.print("性别:"+this.sex+"\t");
System.out.println("我是第"+Dog.count+"只狗");
}
public class Pet {
public static void main(String [] ages){
Dog dog1=new Dog("黑狗",50,50,"");
dog1.showOf();
Dog dog2=new Dog("",60,20,"雌");
dog2.showOf();
Dog dog3=new Dog("黑狗",-10,50,"雄");
dog3.showOf(); }
}


1.1 静态常量

在程序运行过程中,如果一个量的值不会发生改变,可以把该量声明为静态常量,用static final修饰。

public class Dog {
private String name; //private 私有的,对外不可见
private int health;
private int love;
private String sex; /*静态常量一般用于狗的数量过多,而性别就这么两个,为了方便更改而设立
假如我想把狗的性别雄改为(旺男),我只需要在静态常量这改,然后怎么总体都会改
不需要一个个的去改,适合版本升级*/
static final String SEX_MALE="雄";//常量名所有字母全部大写,链接单词时必须下划线
static final String SEX_FEMALE="雌";
public void setName(String name){
if(name.equals("")){
System.out.println("姓名不能为空");
}else {
this.name=name;
}
} public String getName(){
return this.name;
} public void setHealth(int health){
if (health<0){
System.out.println("健康值不合法");
}else {
this.health=health;
}
}
public int getHealth(){
return this.health;
}
public void setLove(int love){
if (love<0){
System.out.println("亲密度不合法");
} else {
this.love=love;
}
}
public int getLove(){
return this.love;
}
public void setSex(String sex){
this.sex=sex;
}
public String getSex(){
return this.sex;
}
//无参构造
public Dog(){ }/*public Dog(String name,int health,int love,String sex){
this.setName(name);
this.setHealth(health);
this.setLove(love);
this.setSex(sex)
*/
//写法改变 但效果一样
public Dog(String name,String sex){
this.setName(name);
this.setSex(sex); } public Dog(String name,int health,int love,String sex){
this(name,sex); //this调取方法
this.setHealth(health);
this.setLove(love); } public void showOf(){
System.out.print("我的名字叫:"+this.name+"\t");
System.out.print("健康值:"+this.health+"\t");
System.out.print("亲密度:"+this.love+"\t");
System.out.print("性别:"+this.sex+"\t"); } }
public class Pet {
public static void main(String [] ages){
Dog dog1=new Dog("黑狗",50,50,Dog.SEX_FEMALE);//静态常量的提取必须 类.常量名
dog1.showOf();
Dog dog2=new Dog("白狗",60,20,Dog.SEX_MALE);
dog2.showOf();
Dog dog3=new Dog("黑狗",10,50,Dog.SEX_FEMALE);
dog3.showOf(); }
}

 

java:构造方法:无参构造/有参构造 this static关键字 静态变量 静态方法 代码块 封装 静态常量。的更多相关文章

  1. 牛客网Java刷题知识点之什么是代码块、普通代码块、静态代码块、同步代码块、构造代码块以及执行顺序

    不多说,直接上干货! 这种形式的程序段我们将其称之为代码块,所谓代码块就是用大括号({})将多行代码封装在一起,形成一个独立的数据体,用于实现特定的算法.一般来说代码块是不能单独运行的,它必须要有运行 ...

  2. 【Java基础】2、Java中普通代码块,构造代码块,静态代码块区别及代码示例

    Java中普通代码块,构造代码块,静态代码块区别及代码示例.Java中普通代码块,构造代码块,静态代码块区别及代码示例 执行顺序:静态代码块>静态方法(main方法)>构造代码块>构 ...

  3. 牛客网Java刷题知识点之代码块(局部代码快、构造代码块、静态代码块)

    不多说,直接上干货! 代码块包括局部代码快.构造代码块.静态代码块. 代码块,就是一段独立的代码空间. 1.局部代码快 对局部变量的生命周期进行控制. 2.构造代码块 对所有对象进行初始化. 3.静态 ...

  4. 2.java中c#中statc 静态调用不同之处、c#的静态构造函数和java中的构造代码块、静态代码块

    1.java和c#静态成员调用的不同之处 static 表示静态的,也就是共享资源,它是在类加载的时候就创建了 java中   可以通过实例来调用,也可以通过类名.成员名来调用,但是一般最好使用类名. ...

  5. Java:构造代码块,静态代码块

    本文内容: 局部代码块 构造代码块 静态代码块 补充 首发日期:2018-03-28 局部代码块: 局部代码块用于限制变量的生命周期,如果希望某些变量在某一过程之后直接失效而不希望被后面继续操作时,可 ...

  6. Java 代码块:静态代码块、构造代码块、构造函数块

    Class : StaticFa package edu.bai.du.lime.staticCode; public class StaticFa { // 随着类的声明而执行 static { S ...

  7. java-代码块-局部代码块、构造代码块、静态代码块

    1.代码块概述: 在Java中,使用{ }括起来的代码被称为代码块. 2.代码块分类: 根据其位置和声明的不同,可以分为局部代码块,构造代码块.静态代码块和同步代码块(多线程). 3.常见代码块的应用 ...

  8. 10、代码块、构造代码块、静态代码块及main方法之间的关系

    1.普通代码块: 在方法或语句中出现在{}之间的类容就称为普通代码块,简称代码块.普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--“先出现先执行”,即顺序执行. /*下面第一个类时合法的 ...

  9. java代码块,静态代码块,静态变量,构造方法执行顺序

    一个类中执行顺序: 静态变量静态代码块代码块构造方法 子类和父类执行顺序: 父类静态变量父类静态代码块子类静态变量子类静态代码块父类代码块父类构造方法子类代码块子类构造方法 直接看代码,一目了然. p ...

随机推荐

  1. centos7之zabbix服务器的常规优化

    一.硬件需求分析 1.首先我们来分析一个硬件需求,这里我以400个agent计算,CPU建议是4核,内存不要少于8GB,硬盘只要不是用了很久的主机就行,容量的话建议300GB基本就够使用好一段时间了, ...

  2. ubuntu apt-get install 时报错curl : Depends: libcurl4 (= 7.58.0-2ubuntu3.6) but 7.61.0-1ubuntu2 is to be installed或者 vim : Depends: vim-common (= 2:8.0.1453-1ubuntu1) but 2:8.0.1766-1ubuntu1 is to be ins

    ubuntu apt-get install 时报错:Depends: ***(=某版本)but***(另一版本)is to be installed 这时候就把这个***给purge后再重新装就好了 ...

  3. ubuntu16.04 caffe 安装

    所需环境 opencv3.x + cuda9.0 安装 caffe首先在你要安装的路径下 clone : git clone https://github.com/BVLC/caffe.git 进入 ...

  4. Xilinx FPGA引脚txt文件导入excel中

    需求 为了把xilinx FPGA的官方引脚文件txt转成excel文件(实际官网中有对应的csv文件就是excel文件了...) xilinx FPGA引脚地址:https://china.xili ...

  5. 升级 pip 超时解决方案

    安装的时候发现报错如下, 提示需要升级pip 按照指引进行升级, 同样的超时 使用 豆瓣源进行安装 pip python -m pip install --upgrade pip -ihttp://p ...

  6. MYSQL配置主从同步

    MYSQL配置主从同步 mysql主服务器配置 vim /etc/my.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql. ...

  7. Django视图

    Django的View(视图) 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错误, ...

  8. 20175209 《Java程序设计》第八周学习总结

    20175209 <Java程序设计>第八周学习总结 一.教材知识点总结 1.泛型 1.泛型类声明: 格式 class People<E> People是泛型类名称 E是泛型列 ...

  9. git最基础操作一

    1. 从远端克隆:git clone -b 克隆的分支 git的地址( eg:git clone -b master https://gitee.com/test/test.git ) 2.提交修改的 ...

  10. text-stroke实现文字描边(镂空)、text-fill-color实现文字填充&渐变(+animation实现流光字体)

    text-stroke:<' text-stroke-width '> || <' text-stroke-color '>(text-stroke-width:设置或检索对象 ...